这个好像、也许、或许、大概、应该、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。引用配置一下,也就差很少了吧。另外还有一些属性注入构造函数注入的。只能说兴许我会写个续,恩,兴许。
 
 
      若有不对之处,请斧正。另,诸君,节日快乐。
相关文章
相关标签/搜索