控制反转和依赖注入
概念
控制反转(IoC),它为相互依赖的组件提供抽象,将依赖(低层模块)对象的获得交给第三方(系统)来控制,即依赖对象不在被依赖模块的类中直接通过new来获取。
控制反转(IoC)一种重要的方式,就是将依赖对象的创建和绑定转移到被依赖对象类的外部来实现。
依赖注入(DI),它提供一种机制,将需要依赖(低层模块)对象的引用传递给被依赖(高层模块)对象。
基本操作和代码示例
工程文件结构如下
说明:
1. spring.xml和app.config中配置spring.net
2. Demo目录下为示例代码的类和接口
spring.xml中的配置:
<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net">
<description>An example that demonstrates simple IoC features.</description>
<!--object的name可以自定义,property中的属性name不能自定义-->
<object name="DemoBase" type="SpringNetConsoleApp.Demo.DemoBase,SpringNetConsoleApp">
<property name="ReturnValue" value="Jack"></property>
<property name="Demo2" ref="Demo2"></property>
</object>
<object name="Demo2" type="SpringNetConsoleApp.Demo.Demo2,SpringNetConsoleApp">
<property name="Demo2Property" value="123"></property>
</object>
</objects>
- 对象定义:
通过
<objects/>
节点的<object/>
子节点来配置程序中用到的对象。
object
中type
配置说明:type="Namespace.ClassName,AssemblyName"
- 属性的注入:
通过
<property/>
节点配置属性,其中name不能自定义,必须跟代码中属性名相同。value
指定属性的值,ref
指向另一个对象
app.config中的配置:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!--sprin.net configuration start-->
<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"/>
<resource uri="file://spring.xml" />
</context>
<objects xmlns="http://www.springframework.net">
</objects>
</spring>
<!--spring.net configuration end-->
</configuration>
<resource uri="file://spring.xml" />
用于指定配置的文件位置。如果编译程序时报找不到xml的错误,可指定一下xml的输出目录,如下图: