Spring.Net其實就是抽象工廠,只不過更加靈活強大,性能上並沒有明顯的區別。 它幫我們實現了控制反轉。 其有兩種依賴註入方式。 第一:屬性註入 第二:構造函數註入 首先,我們去 Spring.net下載 您要的版本。 現在,我們創建一個控制台應用程式,並命名為 Spring.Net_Demo ...
Spring.Net其實就是抽象工廠,只不過更加靈活強大,性能上並沒有明顯的區別。
它幫我們實現了控制反轉。
其有兩種依賴註入方式。
第一:屬性註入
第二:構造函數註入
首先,我們去 Spring.net下載 您要的版本。
現在,我們創建一個控制台應用程式,並命名為 Spring.Net_Demo
其次,我們在引入Spring.NET=>bin=>net=>4.0=>release文件夾下的Common.Logging.dll和Spring.Core.dll兩個程式集。
我們先來說最普通的通過其實現工廠中的實例。
1:併在當前程式下,創建一個命名 IUserDAL 介面 ,並約束一個命名為 Show 的方法
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace Spring.Net_Demo 8 { 9 public interface IUserDAL 10 { 11 12 void Show(); 13 } 14 }
2:其次,我們在創建一命名 UserDAL 類,並實現介面 IUserDAL 中的Show 的方法
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace Spring.Net_Demo 8 { 9 public class UserDAL : IUserDAL 10 { 11 12 public void Show() 13 { 14 Console.WriteLine("我是UserDAL"); 15 } 16 } 17 }
3:接下來,重點就是配置,現在我們配置好App.config
1 <?xml version="1.0" encoding="utf-8" ?> 2 <configuration> 3 <!--Spring.Net中註釋,不然報錯--> 4 5 <!-- <startup> 6 <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /> 7 </startup> --> 8 9 <!--Spring.Net塊配置--> 10 <configSections> 11 <sectionGroup name="spring"> 12 <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/> 13 <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" /> 14 </sectionGroup> 15 </configSections> 16 17 <spring> 18 19 <context> 20 <resource uri="config://spring/objects"/> 21 </context> 22 23 <objects > 24 25 <!--這裡的name屬性,一般是對應類名,等下獲取得時候對應,type中 Spring.Net_Demo.UserDAL 是 UserDAL 的類全名稱,Spring.Net_Demo其程式集--> 26 <object name="UserDAL" type="Spring.Net_Demo.UserDAL,Spring.Net_Demo"> 27 28 </object> 29 30 31 </objects> 32 </spring> 33 34 </configuration>
4:然後我們在Program.cs中調用一下
//這裡是初始化
IApplicationContext context = ContextRegistry.GetContext();
創建UserDAL實例 IUserDAL userDAL = context.GetObject("UserDAL") as IUserDAL;
//調用其方法 userDAL.Show(); Console.WriteLine("我是Spring.Net註入方法!");
4:現在我們可以看到結果
-----------------------------------------------------------屬性依賴註入(簡單值)--------------------------------------------------------------------
現在,我們來看看通過其屬性依賴輸入。
首先,我們修改下UserDAL類,添加一個屬性,併在Show方法中輸出。
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace Spring.Net_Demo 8 { 9 public class UserDAL : IUserDAL 10 { 11 public string Name { get; set; } 12 public void Show() 13 { 14 Console.WriteLine("我是UserDAL"+Name); 15 } 16 } 17 }
其次,我們修改下App.config配置文件在object節點下,添加一個 <property name="Name" value="我是屬性Name哦"></property>
具體過程請仔細看代碼。
<?xml version="1.0" encoding="utf-8" ?> <configuration> <!--Spring.Net中註釋,不然報錯--> <!-- <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /> </startup> --> <!--Spring.Net塊配置--> <configSections> <sectionGroup name="spring"> <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/> <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" /> </sectionGroup> </configSections> <spring> <context> <resource uri="config://spring/objects"/> </context> <objects > <!--這裡的name屬性,一般是對應類名,等下獲取得時候對應,type中 Spring.Net_Demo.UserDAL 是 UserDAL 的類全名稱,Spring.Net_Demo其程式集--> <object name="UserDAL" type="Spring.Net_Demo.UserDAL,Spring.Net_Demo"> <!--這裡通過給Name或ID屬性,名字必須一致,我們簡單給個值為“我是屬性Name哦”--> <property name="Name" value="我是屬性Name哦"></property> </object> </objects> </spring> </configuration>
最後,在Program.cs調用不變,直接運行,結果如下:
我們可以看到,其在App.config中就是給屬性賦值操作了。
-----------------------------------------------------------屬性依賴註入(複雜值)--------------------------------------------------------------------
其屬性註入,還可以註入更複雜的值。
例如,我們在添加一個命名為:UserServer 的類。並添加一個UserDAL的屬性,並添加方法Show中輸出UserDAL中Name
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace Spring.Net_Demo 8 { 9 public class UserServer 10 { 11 public UserDAL userDAL { set; get; } 12 public void Show() 13 { 14 Console.WriteLine("我是UserServer"+userDAL.Name); 15 } 16 } 17 }
現在,我們該改造下App.config。詳情請看代碼。
<?xml version="1.0" encoding="utf-8" ?> <configuration> <!--Spring.Net中註釋,不然報錯--> <!-- <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /> </startup> --> <!--Spring.Net塊配置--> <configSections> <sectionGroup name="spring"> <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/> <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" /> </sectionGroup> </configSections> <spring> <context> <resource uri="config://spring/objects"/> </context> <objects > <!--這裡的name屬性,一般是對應類名,等下獲取得時候對應,type中 Spring.Net_Demo.UserDAL 是 UserDAL 的類全名稱,Spring.Net_Demo其程式集--> <object name="UserDAL" type="Spring.Net_Demo.UserDAL,Spring.Net_Demo"> <!--這裡通過給Name或ID屬性,名字必須一致,我們簡單給個值為“我是屬性Name哦”--> <property name="Name" value="我是屬性Name哦"></property> </object> <!--這裡我們在添加一個節點,屬性註入複雜屬性 --> <object name="UserServer" type="Spring.Net_Demo.UserServer,Spring.Net_Demo"> <!--這裡屬性直接指向UserDAL節點,Name屬性必須對應 --> <property name="UserDAL" ref="UserDAL"></property> </object> </objects> </spring> </configuration>
現在,我們還需修改下Program.cs代碼,因為我們現在是註入UserServer
1 IApplicationContext context = ContextRegistry.GetContext(); 2 //IUserDAL userDAL = context.GetObject("UserDAL") as IUserDAL; 3 //現在是註入UserServer 4 UserServer userDAL = context.GetObject("UserServer") as UserServer; 5 userDAL.Show(); 6 Console.WriteLine("我是Spring.Net註入方法!");
我們可以看到,結果跟上面簡單屬性註入是一樣。
-----------------------------------------------------------構造函數依賴註入--------------------------------------------------------------------
構造函數註入,其實也差不多。首先,我們修改下UserDAL代碼。
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace Spring.Net_Demo 8 { 9 public class UserDAL : IUserDAL 10 { 11 public string Name { get; set; } 12 13 //這裡添加一個構造函數 14 public UserDAL(string name) 15 { 16 Name = name; 17 } 18 19 public void Show() 20 { 21 Console.WriteLine("我是UserDAL"+Name); 22 } 23 } 24 }
接下來,我們依然是要修改下App.config配置文件。
<?xml version="1.0" encoding="utf-8" ?> <configuration> <!--Spring.Net中註釋,不然報錯--> <!-- <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /> </startup> --> <!--Spring.Net塊配置--> <configSections> <sectionGroup name="spring"> <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/> <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" /> </sectionGroup> </configSections> <spring> <context> <resource uri="config://spring/objects"/> </context> <objects > <!--我們註釋掉這一部分-->
<!--這裡的name屬性,一般是對應類名,等下獲取得時候對應,type中 Spring.Net_Demo.UserDAL 是 UserDAL 的類全名稱,Spring.Net_Demo其程式集 <object name="UserDAL" type="Spring.Net_Demo.UserDAL,Spring.Net_Demo"> 這裡通過給Name或ID屬性,名字必須一致,我們簡單給個值為“我是屬性Name哦 <property name="Name" value="我是屬性Name哦"></property> </object> --> <!--這裡為構造函數註入,兩個選擇一個就可,不在細說,有註釋--> <object> <!--構造函數註入 Name不區分大小,對應構造參數名 --> <constructor-arg name="name" value="構造函數註入"></constructor-arg> <!-- 構造函數註入,需聲明構造, 可直接用index=0 --> <!-- <constructor-arg index="0" value="構造函數註入"></constructor-arg> --> </object> <!--這裡我們在添加一個節點,屬性註入複雜屬性 --> <object name="UserServer" type="Spring.Net_Demo.UserServer,Spring.Net_Demo"> <!--這裡屬性直接指向UserDAL節點,Name屬性必須對應 --> <property name="UserDAL" ref="UserDAL"></property> </object> </objects> </spring> </configuration>
接下,調用代碼無需改變,我們看下結果。
-----------------------------------------------------------外部引入XML文件--------------------------------------------------------------------
如果越來越多類,我們要註入,在配置文件里不會越來越多註入聲明嗎?
我們可以獨立把這些獨立放在一個XML文件里,然後在配置文件里聲明塊就可以了。
首先,我們新建一個Server.xml,在裡面放入<objects>節點的所有代碼。
當然,您可以新建多個,比如在三層中,一個是DAL層,一個是BLL層等等,這裡就不怎麼一一展示了。
(這裡需註意下,因為我的是控制台應用程式,需右鍵這個XML文件,修改其屬性《生成操作=> 嵌入的資源》)。
1 <?xml version="1.0" encoding="utf-8" ?> 2 <objects> 3 4 <object name="UserDAL" type="Spring.Net_Demo.UserDAL,Spring.Net_Demo"> 5 6 7 <!--構造函數註入 可直接用index=0--> 8 <constructor-arg index="0" value="外部引入哦"></constructor-arg> 9 </object> 10 11 </objects>
然後修改下App.comfig ,詳情請看代碼
<?xml version="1.0" encoding="utf-8" ?> <configuration> <!--Spring.Net中註釋,不然報錯--> <!-- <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /> </startup> --> <!--Spring.Net塊配置--> <configSections> <sectionGroup name="spring"> <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/> <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" /> </sectionGroup> </configSections> <spring> <context> <resource uri="config://spring/objects"/> <!-- 外部XML文件引入,在控制臺中,同時需把文件屬性中的生成操作改成'嵌入資源'--> <resource uri="assembly://Spring.Net_Demo/Spring.Net_Demo/Server.xml"/> </context> </spring> </configuration>
調用的話,不需要任何改變。
本文結束。
以上兩種註入方法,雖然有點啰嗦,勿介意哈,老鳥飄過哈。