1. 什么是 IoC ?
关于IoC的详细解释请看 Inversion of Control Containers and the Dependency Injection pattern (英文/中文),本文只会作一些简单介绍
IoC(Inversion of Control),我们叫它"控制反转",也可以叫它"依赖注入"(Dependency Injection)。
引用自 JGTM'2004 [MVP] 的话来解释IoC
>>> 原来我是这样解释应用IoC的意图和方式的(但还是不够清晰):如果我想打破A->B的依赖,那么我可以通过引入A、B之间的交互协议I来办到,也 就是将A->B变为(A->I)+(I<-B)(此举同时满足了DIP和OCP原则),那么IoC就是帮助我们用各种各样的方法(如构 造器注入、属性注入或接口注入等等)在运行期把I的一个具体实现B传达给A使用的一系列机制。
使用IoC的主要目地就是实现程序模块的低偶合,在DotNet下比较著名的IoC框架是Castle和Spring.net。
2. IoC的三种形式
依赖注入的形式主要有三种,我分别将它们叫做构造子注入(Constructor Injection)、设值方法注入(Setter Injection)和接口注入(Interface Injection)。
3. Castle中的IoC介绍
Castle.IoC 支持构造子注入和设值方法注入,但更侧重构造子注入。
4. 使用Castle.IoC
使用 Castle.IoC 主要是配置 components
4.1 使用代码配置
publicstaticWindsorContainercontainer=newWindsorContainer(@"../../config.xml");
container.AddComponent("FormatService",typeof(FormatService));
container.AddComponent("format",typeof(IMessageFormat),typeof(HtmlMessage));
4.2 使用XML文件配置
<?xmlversion="1.0"encoding="utf-8"?>
<castle>
<components>
<componentid="FormatService"
type="IoCSample.FormatService,IoCSample"/>
<componentid="format"
service="IoCSample.Components.IMessageFormat,IoCSample"
type="IoCSample.Components.HtmlMessage,IoCSample"/>
</components>
</castle>
如何配置IList,IDictionary,Array等复杂类型IDictionary
代码:
publicclassC
{
publicC(){}
publicC(IDictionaryd)
{
this.dictionary=d;
}
privateIDictionarydictionary;
publicIDictionaryDictionary
{
get{returnthis.dictionary;}
}
}
配置:
<componentid="c"type="CastleDemo.C,CastleDemo">
<parameters>
<d>
<itemkeyType="System.String"valueType="System.String">
<itemkey="a">a</item>
<itemkey="b">b</item>
</item>
</d>
</parameters>
</component>
IList
代码:
publicclassD
{
privateIListlist;
publicD(){}
publicIListList
{
get{returnthis.list;}
}
publicD(IListlist)
{
this.list=list;
}
}
配置:
<componentid="d"type="CastleDemo.D,CastleDemo">
<parameters>
<list>
<itemtype="System.String">
<item>a</item>
<item>b</item>
<item>c</item>
</item>
</list>
</parameters>
</component>
Array
代码:
publicclassE
{
privateint[]ages;
publicint[]Ages
{
get{returnthis.ages;}
}
publicE()
{
}
publicE(int[]ages)
{
this.ages=ages;
}
}
配置:
<componentid="e"type="CastleDemo.E,CastleDemo">
<parameters>
<ages>
<itemtype="System.Int32">
<item>1</item>
<item>2</item>
<item>3</item>
</item>
</ages>
</parameters>
</component>
分享到:
相关推荐
解决castle事务处理framework4.0异常,反编译修改后的dll集合,castle+Ibatis.NET集成dll,包含事务处理相关,包含文件列表: Castle.Core.dll Castle.DynamicProxy.dll Castle.Facilities....
Smooth.IoC.Dapper.Repository.UnitOfWork 它创建了此程序包,以“修复”存储库和UnitOfWork模式背后的矛盾概念,并使用控制/依赖注入的反转。 我还想通过注入的工厂自动创建连接/开始事务,并在处理时断开/提交,...
主要内容 1.为什么要IOC 2.什么是Castle IOC容器 3.快速入门示例 4.几个重要的概念
aop castle ioc 动态代理 webservice
利用Castle框架中IOC技术的技术文档
☆ 资料说明:☆ Castle Windsor is best of breed, mature Inversion of Control container available for .NET and Silverlight; ☆ 文件清单:☆ Castle.Windsor.3.2.0.7z
Windsor是Castle 的一个IOC容器。它构建于MicroKernel之上,功能非常之强大,能检测类并了解使用这些类时需要什么参数,检测类型和类型之间工作依赖性,并提供服务或者发生错误时提供预警的机制。 以下事例中会给出...
Castle 的 IOC 容器,介绍反转控制
Castle是针对.NET平台的一个开源项目,从数据访问框架ORM到IOC容器,再到WEB层的MVC框架、AOP,基本包括了整个开发过程中的所有东西,为我们快速的构建企业级的应用程序提供了很好的服务。4月份以来,Terrylee写了一...
castle框架,利用Castle框架中IOC技术实现权限服务
这是一个应用 Castle技术实现 IOC 的例子,用vs2010实现
在配置文件中配置服务实例,通过Castle来实现构造wcf服务
来自TerryLee\'s Tech Space 博客, 本人只是打包,方便收藏,没有侵权的意思,所以不扣点数。 原作者地址:http://www.cnblogs.com/Terrylee/
此为本人写的一个Castle+ibatis示例代码,使用了Castle中的IOC容器,Facility事务管理,ibatis由Castle进行管理.供大家下载,共同进步!
写了基于C#使用Spring.Net的演示实例,希望能给有需要的人带来帮助,其中演示了配置下的IOC、AOP、属性注入、构造函数注入、通知过滤器、以及不使用配置直接代码硬编的AOP动态代码过程,另外还增加了Castle实现IOC及...
WebAPIContrib ASP.NET Web API的社区贡献
Castle是针对.NET平台的一个开源项目,从数据访问框架ORM到IOC容器,再到WEB层的MVC框架、AOP,基本包括了整个开发过程中的所有东西,为我们快速的构建企业级的应用程序提供了很好的服务. 该文件是chm格式,包含两...
Webolize IssueTracker(又名Bugtracker)是基于Web的错误和问题跟踪器(是时间跟踪器的一部分... 使用C#,ASP.NET和(BSD)Cuyahoga Web CMS(nhibernate,Castle Ioc ...)编写。 在Windows XP,Vista或Server上运行