Spring.Net 依賴注入

陳彥斌發表於2019-08-13

一、Spring.Net概念

  程式設計模型(Ioc,DI方式)

IoC:控制反轉
原來建立物件的權利由程式來控制就是new例項,IoC就是改由容器來建立,相當於一個工廠,
DI:依賴注入
沒有IoC就沒有DI,DI:容器在建立物件時,通過讀取配置檔案(一般是xml)設定的預設值,使其在建立時就擁有了某些注入的值。  

  什麼是Spring.net?

spring是一個依賴注入的設計框架,使專案層與層之間解耦達到更靈活的使用。Spring.net是Spring中支援.net開發的框架。
Spring.net是一個企業級的重型依賴注入框架應用框架。Spring.Net會讓應用效能下降,不過它的靈活的優點遠大於缺點。適合用來做企業的oa系統之類的。
Spring.net能夠幹什麼?
在core(核心)和AOP(模型支援,屬性反轉,接受注入)之上支援:
1, MSQ(訊息佇列)
2, MVC
3, WEB
4, Quartz.net
Spring.net能做到的不止如此。

 二、DEMO示例

新建一個控制檯程式,程式比較簡單,直接上程式碼

老方法

Program.cs

 1 using System;
 2 
 3 namespace Spring.Net.DEMO
 4 {
 5     class Program
 6     {
 7         static void Main(string[] args)
 8         {
 9             IUserInfoDal UserInfo = new UserInfoDal();
10             UserInfo.Show();
11             Console.ReadKey();
12         }
13     }
14 }

IUserInfoDal.cs

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Text;
 4 
 5 namespace Spring.Net.DEMO
 6 {
 7     public interface IUserInfoDal
 8     {
 9         void Show();
10     }
11 }

UserInfoDal.cs

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Text;
 4 
 5 namespace Spring.Net.DEMO
 6 {
 7     public class UserInfoDal : IUserInfoDal
 8     {
 9         public void Show()
10         {
11             Console.WriteLine("越來越帥");
12         }
13     }
14 }

效果

Spring.Net注入方式

 第一步去官網下載Spring.Net程式集

地址:http://www.springframework.net/download.html

1 連結:https://pan.baidu.com/s/1cLjAi0lS_iy1tKRMJIBw0w 
2 提取碼:tn3s 
也可以到我百度雲盤上下載,包含中文API

第二步:XXX\XXX\Spring.NET-1.3.1\Spring.NET\bin\net\4.0\release下找到 Common.Logging.dll和Spring.Core.dll這兩個dll複製到專案中新增引用

第三步:引入名稱空間

1 using Spring.Context;
2 using Spring.Context.Support;

第四步(app.config檔案):

 1 <?xml version="1.0" encoding="utf-8" ?>
 2 <configuration>
 3   <configSections>
 4     <sectionGroup name="spring">
 5       <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/>
 6       <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
 7     </sectionGroup>
 8   </configSections>
 9   <spring>
10     <context>
11       <!--Spring.Net物件容器的配置(下面這句話表示:容器裡的物件,在當前配置檔案(Web.config)的spring節點下的objects節點中配置物件)-->
12       <resource uri="config://spring/objects"/>
13     </context>
14     <!--objects:配置的容器裡面的物件-->
15     <objects xmlns="http://www.springframework.net">
16       <description>An  example that demonstrates simple IoC features.</description>
17       <!--name起個名字,一般為類的名稱;type:左邊:名稱空間+類名,右邊:名稱空間-->
18       <object name="IUserInfo" type="SpringDemo.UserInfo, SpringDemo">    </object>
19     </objects>
20   </spring>
21 </configuration>

第五步:建立類與介面

IUserInfoDal.cs(介面)

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Text;
 4 
 5 namespace DEMO
 6 {
 7     public interface IUserInfoDal
 8     {
 9         string Show();
10     }
11 }

UserInfoDal.cs(類)

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Text;
 4 
 5 namespace DEMO
 6 {
 7     public class UserInfoDal : IUserInfoDal
 8     {
 9         public string Show()
10         {
11             return "越來越帥!~";
12         }
13     }
14 }

第六步:實現

 1 using Spring.Context;
 2 using Spring.Context.Support;
 3 using System;
 4 using System.Windows.Forms;
 5 
 6 namespace DEMO
 7 {
 8     public partial class Form1 : Form
 9     {
10         public Form1()
11         {
12             InitializeComponent();
13         }
14 
15         private void Button1_Click(object sender, EventArgs e)
16         {
17             //這句程式碼讓spring.net讀取配置檔案,自動完成注入和反轉操作,建立例項UserInfoDalInstance
18             IApplicationContext ctx = ContextRegistry.GetContext();
19             //我們到所建立的上下文裡面拿到我們剛才建立的例項IUserInfo
20             IUserInfoDal dll = ctx.GetObject("IUserInfo") as UserInfoDal;
21             string res = dll.Show();
22         }
23     }
24 }

第七步:搞定!!!

程式中並沒有new例項物件,但是已經通過配置檔案,正確的例項化了,依賴注入成功。

相關文章