前奏:
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的属性赋值。