Spring.Net簡單用法


  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>

    調用的話,不需要任何改變。

 

           本文結束。  

 

    以上兩種注入方法,雖然有點啰嗦,勿介意哈,老鳥飄過哈。 

 

    

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM