這個好像、也許、或許、大概、應該、Maybe真的能夠算是傳說中的Spring.Net了吧

                                                         這個好像、也許、或許、大概、應該、Maybe真的能夠算是傳說中的Spring.Net了吧
        之前寫過一篇名叫」這個好像、也許、大概、應該、Maybe真的算是傳說中的面向接口編程了吧「的文章,當時好像是在評論裏許諾之後會有一篇叫」文章這個好像、也許、大概、應該、Maybe真的算是傳說中的Spring.Net吧「。而後,如今在咱們節日的時候,大抵能夠算是來承兌諾言的吧。
       先介紹一下IoC吧。它呢,中文名字是控制反轉。英文是Inversion of Control。Spring.Net就是IoC的一個框架。本來的對象是由類來管理的,好比讓建立一個此類的實例,咱們會new此類。有了IoC咱們就不須要用到這個類去new了,或者說是不用這個類去管理它相應的對象了。而是交給了咱們的IoC框架來管理這些了。這樣不用類去管理的話,就能夠作到鬆耦合。劉冬先生寫過Spring.Net的一個系列,感興趣的朋友能夠看一下的。
        我在這裏就寫一個小小的案例吧。
        最開始,先建立一個窗體的應用程序,在窗體上建立一個按鈕而且將窗體應用程序的輸出類型改爲控制檯應用程序(如若不改爲控制檯應用程序,那麼將沒法輸出咱們想要的結果)。創建一個類和一個接口。寫類和接口,是爲後面調用實例作準備。
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6  
 7 namespace SpringNetStudy1024
 8 {
 9     class Mutudu:IMutudu
10     {
11         public void Show()
12         {
13             Console.WriteLine( "小杜成功的寫了一個Spring.Net的案例" );
14         }
15     }
16 }
Mutudu
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6  
 7 namespace SpringNetStudy1024
 8 {
 9     interface IMutudu
10     {
11         void Show();
12     }
13 }
IMutudu

 

 
         由於咱們是須要用到第三方的類庫的。那麼咱們得先把Spring.Net第三方的類庫先添加到咱們的項目當中來。咱們就在項目中新創建一個文件夾,將咱們須要的第三方類庫拷貝進來。而後項目添加對這些第三方類庫的引用。咱們必需要引用的有兩個dll,一個是Common.Logging.dll。另一個是Spring.Core.dll.這兩個是必不可少的。
 
          
 
 
 
        如若少了,則會這樣(我曾經少引用了一個):
   
 
 
       第三方類庫咱們是引用進來了。咱們說了,類是交給咱們的IoC容器來管理的,那麼咱們的IoC容器呢?咱們須要獲得IoC容器,而後IoC容器纔好去管理吧。關於這個嘛,咱們是經過配置初始化IoC容器。也就是初始化IApplicationContext。我的認爲這個類的地位是有點相似於EF裏的上下文的,有點承上啓下的意思。那麼修改一下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                              < resource uri =" config://spring/objects"/>
12                    </ context>
13                    < objects xmlns =" http://www.springframework.net">
14                              < description>An  example that demonstrates simple IoC features.</description>
15                    </ objects>
16           </ spring>
17 </configuration>
App.Config

 
       另外須要說一下的就是在配置文件中,咱們是經過objects節點的子節點來配置程序中用到的對象的,固然,object節點其是位於objects(有s)節點下的。好比咱們如今須要把咱們那會寫的類配置進來,那麼就在objects節點下配置object節點:
 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                              < resource uri =" config://spring/objects "/>
12                    </ context >
13                    < objects xmlns =" http://www.springframework.net ">
14                              < description >An  example that demonstrates simple IoC features.</ description>
15                              <!-- 下面就是將類交給窗口管理的配置代碼,僅此一行。 -->
16                              < object name =" Mutudu"       type =" SpringNetStudy1024.Mutudu, SpringNetStudy1024" >    </ object>
17                    </ objects >
18           </ spring >
19 </ configuration>
20  
類讓IoC來管理吧。

 
      經過"IApplicationContext ctx = ContextRegistry .GetContext();"這行代碼拿到的就是配置好的object下節點咱們配置好的對象。這行代碼蠻關鍵的。
 
 
 
      那麼,咱們看一下按鈕點擊事件裏的代碼:
 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.Data;
 5 using System.Drawing;
 6 using System.Linq;
 7 using System.Text;
 8 using System.Threading.Tasks;
 9 using System.Windows.Forms;
10 using Spring.Context;
11 using Spring.Context.Support;
12  
13 namespace SpringNetStudy1024
14 {
15     public partial class Form1 : Form
16     {
17         public Form1()
18         {
19             InitializeComponent();
20         }
21  
22         private void PowerOfIoC_Click( object sender, EventArgs e)
23         {
24             //這裏返回的或者說獲得的就是根據咱們在object節點的內容配置好的容器的對象。
25             IApplicationContext ctx = ContextRegistry .GetContext();
26             //而後就能夠經過獲得的對象,獲得實例了。
27             IMutudu mutudu = ( IMutudu)ctx.GetObject( "Mutudu");
28             //調用一下方法。
29             mutudu.Show();
30         }
31     }
32 }
按鈕點擊事件裏的代碼

 

 
        好的。代碼寫好了,執行一下吧,點擊按鈕,看一下Spring.Net的力量吧(真的沒有new哦):
 
 
      如此看來的話,小杜卻是成功的寫了一個關於Spring.Net的一個小Demo。引用配置一下,也就差很少了吧。另外還有一些屬性注入構造函數注入的。只能說興許我會寫個續,恩,興許。
 
 
      若有不對之處,請斧正。另,諸君,節日快樂。
相關文章
相關標籤/搜索