Spring.Net簡單用法

来源:http://www.cnblogs.com/wzf-Code/archive/2016/06/10/5574046.html
-Advertisement-
Play Games

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>

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

 

           本文結束。  

 

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

 

    

    


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 之前在http://www.cnblogs.com/JsonZhangAA/p/5568575.html博文中是利用的image控制項來顯示的二進位流圖片,我現在想的是能 通過普通的<img id="xx" src="xx"/>這種形式來顯示我的二進位流圖片嗎?必須可以(◑▽◐),就是寫法稍微麻煩了一 ...
  • 推薦:http://www.cnblogs.com/roucheng/p/3521864.html ...
  • 在瞭解HTTP斷點續傳的原理之前,先來說說HTTP協議,HTTP協議是一種基於tcp的簡單協議,分為請求和回覆兩種。請求協議是由客戶機(瀏覽器)向伺服器(WEB SERVER)提交請求時發送報文的協議。回覆協議是由伺服器(web server),向客戶機(瀏覽器)回覆報文時的協議。請求和回覆協議都由 ...
  • 當頁面被提交請求第一個方法永遠是構造函數。您可以在構造函數裡面初始一些自定義屬性或對象,不過這時候因為頁面還沒有被完全初始化所以多少會有些限制。特別地,您需要使用HttpContext對象。當前可以使用的對象包括QueryString, Form以及Cookies集合,還有Cache對象。註意:在構 ...
  • 屬性:封裝了 一部分對象狀態的函數成員 事件:簡化對象狀態轉化處理的函數成員 C#不支持類的多繼承(與C++不同),但可同時實現多個介面 C#是一種類型安全的語言,即類型只能通過定義的協議進行交互,從而保證內部類型的一致化。 C#支持靜態類型化,在編譯時會執行靜態類型安全性檢查 C#依靠運行時環境來... ...
  • 手機才有16G空間,用一段時間後,總是提示記憶體不足,各種清理軟體都沒卵用。 有一個方法立即見效: 1、進入Recovery 2、格式化 SDCard 博客園首席神棍 野生菌野菜乾批發 大舍大得 小舍小得 不捨不得 ...
  • 五月中旬 .NET Core RC2 如期發佈,我們遂決定翻譯 ASP.NET Core 文檔。我們在何鎮汐先生、悲夢先生、張仁建先生和雷歐納德先生的群中發佈了翻譯計劃招募信息,並召集到一群小伙伴。我們從六月開始翻譯文檔,目前已完成前兩章,並將按計劃以連載的方式逐篇公佈。當翻譯計劃完成後,所有文檔將... ...
  • 之前看了Sql Server中的基本數據類型,發現image這個類型還是比較特殊的。 於是乎就做了一個將圖片以二進位流形式存儲的程式http://www.cnblogs.com/JsonZhangAA/p/5568575.html,現在如果我想批量ed存儲網上一個網站的圖片,難道我要手寫n多地址嗎? ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...