首页 > 代码库 > 小叙Spring.NET(Ioc与DI)的使用步骤

小叙Spring.NET(Ioc与DI)的使用步骤

       那今天就介绍一下我理解的Spring.net吧。介绍Spring.NET之前,先谈点其他的。我们都知道,.NET有一个基本原则“高内聚,低耦合“。关于这个概念,想必大家都知道。所谓高内聚,也就是模块内部内聚,各个模块之间“低耦合”。也就是结耦,降低耦合度。所以我们选取了传统的三层,把,数据访问层,业务逻辑层,UI层分离,降低耦合度!
       但是这还不够,我们为了让业务逻辑层与数据访问层彻底结耦。可以用面向接口编程的思想,采用抽象工厂模式。也就是建立工厂,采用映射的方式,使业务逻辑层与数据访问层结耦。这 确实解决了很多问题,但是,如果让业务逻辑层与UI层也进行结耦。我们如果仍然采用抽象工厂模式,建立工厂,信息写入配置文件,采用映射。那岂不是很麻烦??所以,我们引出了我们今天的内容,Spring.NET.
      Spring本是java的一个框架,如今,它已经完美的发展成了几个技术的框架。Spring.NET就是一个很好的例子。那么Spring.Net有什么作用呢?他有着很强大的功能,就是提到的Ioc与DI。所谓Ioc,也就是创建实例,创建对象,相当于刚刚提到的抽象工厂的作用。所谓DI,就是“依赖注入”,可以给某一属性进行赋值等。 

 

今儿就介绍IoC(创建对象的权利由开发人员自己控制new,转到了由容器来控制)DI(在对象初始化时可以给一些属性,构造方法的参数等注入默认值,可以是复杂类型)的具体使用方法吧。Spring.NET的工作,都是在配置文件里面进行的。所以,叙述,和读起来,难免的都会费劲。
1.自然是添加程序集的引用了
这似乎是所有技术都难逃的步骤,程序集网上或者Demo里面也都可以找到,引用上即可。
2. 配置文件内,写入以下代码
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <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 xmlns="http://www.springframework.net">
            <description>An  example that demonstrates simple IoC features.</description>        </objects>
    </spring>
</configuration>
3.IoC的实现
  (Ioc)需要new的类,放到在<objects></objects>节点中的object节点里面, 其中name为类名,可以随意定义,type:前半部分为创建的类的全名,后半部分为类所在的程序集-->

 

  <object name="UserInfoService"type="SpringNet.UserInfoService,SpringNet">

  </object>
使用时使用下面代码就可以了
 IApplicationContext ctx = ContextRegistry.GetContext();
 IUserInfoService lister = (IUserInfoService)ctx.GetObject("UserInfoService"); 
 。使用时如果需要更换具体的对象,只需要在配置文件里面改动就可以了

4.(DI的实现)给这个类加一个属性,也可以加多个,就在object节点里面加<property/>节点就可以了

 

例如:<object name="UserInfoService" type="SpringNet.UserInfoService,SpringNet">
   <!--给这个类加一个属性,也可以加多个-->
  <!--属性名字,值:直接赋值。这就为类里面的name属性,赋了一个值-->
 <property name="name" value="http://www.mamicode.com/志华"/>
 </object> 
如果里面有一个复杂的数据类型,比如有个person类,那么就只用链接属性注入,假如UserInfoService类有一个person类的字段。就如下面这样注入

 

 <object name="UserInfoService" type="SpringNet.UserInfoService,SpringNet">
  <!--给这个类加一个属性,也可以加多个-->
 <!--属性名字,值:直接赋值-->
  <property name="name" value="http://www.mamicode.com/志华"/>

 

    <!--指向下面的object节点-->

    <property name="per" ref="Myperson"/>

  </object>

  <!--让上面的ref属性进行指向 相当于实例化一下-->

  <object name="Myperson" type="SpringNet.Person,SpringNet">

    <property name="Age" value="http://www.mamicode.com/21"/>

  </object>

如果调用的话,这样就可以获得具体的实例数据,以及属性了。
 5.到现在为止就基本算结束了,如果项目过大,我们可以采取分离的机制
在<spring>节点下的<context>节点中,如下面的属性,就指向了另外一个xml文件。刚才的配置,就可以写在新的文件里面了,效果是一样的
<resource uri="file://Service.xml"/><!--引用的地址,从bin/debug文件夹下找,所以我们得注意地址 右击文件属性,把 复制到输出目录,定义为始终复制--> 

小叙Spring.NET(Ioc与DI)的使用步骤