Spring.Net的快速应用

前奏:

 spring.net(从java里面的spring移植过来的)  而Unity(.net自带的实现Ioc和DI功能的开源项目)

主要功能:{
IoC: Inversion of Control
控制翻转:就是创建对象的权利由开发人员自己控制New,转到由容器来控制。第三方容器创建对象,我们只需要调用容器。(类比抽象工厂)


DI:Dependency Injection
依赖注入:通过容器创建对象的时候,在对象初始化是可以给一些属性,构造方法的参数等注入默认值。初始值

Aop:面向切面编程,相当于MVC里面的过滤器

}

参考:spring.net的帮助文档中有Ioc快速入门。

开始实现Ioc和DI:  Spring.net提供的容器是IApplicationContext

  第一步:引用DLL
  Spring.Core.dll(主要)  还有就是如果要实现Aop,再引用Aop的dll。spring.net 中用到了日志是 Common.Logging.dll也需要引用一下。

  第二步:写配置文件,指定要new的命名空间和程序集

      (1)配置文件中初始化容器IApplicationContext   //创建容器的方法有很多种

        <configuration>

          <configSections>

             <sectionGroup name="spring">

                <section name="context" type="Spring.Context.Support.ContextHandler , Spring.core"></section>

                <section name="objects"    //说的就是下面名字是objects的字节。 type="Spring.Context.Support.DefaultSectionHandler , Spring.core"></section>

             </sectionGroup>

          </configSections>

          <spring>

            <context>

              <resource uri="" />

            </context>

            <objects xmlns="http://www.springframework.net">    //既然加s了,说明里面可以有多个。看你要对那个类创建实例了。  

              <object name=""  type="命名空间.类名+,+程序集名 "></object>   //name所指定的就是id.代码中通过id从IApplicationContext中请求所定义的对象。

              <description></description>

            </objects>                       

          </spring>

        </configuration>

      (2)获取对象

        方法{

            IApplicationContext ctx=contextRegistry.GetContext(); //读取配置文件创建出容器

            类名或接口  na=(强转类名或接口) ctx.Getobject("配置文件中object的name");  //拿字节。对类new出对象,因为这个配置中指定的类可能继承了接口。

          }

//好处:比如说以后我们换成了另外一个业务,只要改配置文件就行了。

      (3)DI的实现:

        把配置文件中<object>节点看成一个类里面可以加属性节点

          <property name=""  value="" />  这里的name就是类中具体的属性。value是值

         但是如果这个属性类型是另一个自己声明的类(这个类中还有自己的属性),就不能用value直接赋值了。

        所以就再声明一个<object name="objectName"> property属性赋值 </object>配置的是自己定义类的类型。然后

          <property name="属性名"  ref="objectName" />让它关联定义的object

总结:就是当属性的类型是一个复杂类型的时候不能直接赋值,而是ref到另一个object,为另一个object的属性赋值。

      

    

 

原文地址:https://www.cnblogs.com/liuwenxu/p/6409151.html