`

.NET 开源项目介绍及资源推荐:IOC容器篇

阅读更多

关于IOC 的概念就不多说了,在.NET 平台下,比较优秀的IOC 容器框架有如下四种,本文试图作一个简单的介绍,以及推荐一些各个框架的学习资源。

一.Castle

Castle 中包含了一组开发框架,它里面的IOC 容器 是Windsor ,目前Castle 已经发 布了RC1 版本,其中Windsor 已经是RC3 了。在Windsor 中提出了自动装配的概念, 由容器来自动管理组件之间的依赖关系,无需用户去编写XML 配置文件或者通过Attribute 来指定容器之间的依赖关系。这样在使用上非常的简单,同时也带了一些问题,作为开发人员的我 们无法控制组件的依赖关系。如下面的XML 配置文件,仅仅是设定了组件的参数而已:

<? xmlversion="1.0"encoding="utf-8" ?>

< configuration >

< components >

< component id ="myMainComponent" >

< parameters >

< i > 1 </ i >

</ parameters >

</ component >

</ components >

</ configuration >

简单的使用:

public class App

{
public static void Main()

{
IWindsorContainercontainer
= new WindsorContainer( new XmlInterpreter( " http://www.cnblogs.com/BasicUsage.xml " ));

container.AddComponent(
" myMainComponent " ,

typeof (MyMainComponent));

container.AddComponent(
" myComponent1 " ,

typeof (MyComponent1));

container.AddComponent(
" myComponent2 " ,

typeof (MyComponent2));

}


}

官方主页:http://www.castleproject.org/

学习资源:

官方文档:http://www.castleproject.org/container/documentation/v1rc3/index.html

叶子的家:http://wj.cnblogs.com/ [ 中 文]

TerryLee Castle 系列:

http://terrylee.cnblogs.com/archive/2006/04/28/castl_ioc_article.html [ 中文]

Ayende 一篇非常棒的文章:http://msdn2.microsoft.com/en-us/library/aa973811.aspx [ 英 文]


二.Spring.NET

Spring.NET 是从javaSpring Framework 移植过来的,现在版本应该是Spring.NET 1.0.2 。正好和前面说的Castle 相反,Spring.NET 推崇做法是使用配置文件来管理组件之间的依赖关系,当然它也支持自动装配,不过不推荐使 用。这样使用配置文件的方式,带来的问题是当项目非常大的时候,配置文件会非常的繁琐,手工配置会变得很复杂,如下面的配置文件,需要指定每一个组件以及 它们之间的依赖关系:

<? xmlversion="1.0"encoding="utf-8" ?>

< configuration >

< object id ="myManComponent" class ="CastleDemo.MyMainComponent,CastleDemo" >

< constructor-arg >

< ref object ="mycomponent1" />

</ constructor-arg >

< constructor-arg >

< ref object ="mycomponent2" />

</ constructor-arg >

< constructor-arg >

< value > 1 </ value >

</ constructor-arg >

</ object >

< object id ="mycomponent1" class ="CastleDemo.MyComponent1,CastleDemo" />

< object id ="mycomponent2" class ="CastleDemo.MyComponent2,CastleDemo" />

</ configuration >

官方主页:http://www.springframework.net/

学习资源:

官方文档:http://www.springframework.net/documentation.html [ 英 文]

雨痕的几篇文章:http://www.rainsts.net/default.asp?cat=13

Zhuzl Spring.NET 系列:http://blog.csdn.net/zlz_212/category/241716.aspx


三.ObjectBuilder

ObjectBuilder ,只看其名字就知道是用来构造对象的,是由微软模式与实践小组最早开发并使 用在CAB ,因为表现出色,后来在Enterprise Library 中也使用它来负责对象的创建工作,因为OB 可以说是微软的IOC 容器,它也是一个轻量级的IOC 框架。它与前面 介绍的Spring.NET 很多相似的地方,需要显式的通过Attribute 来 指定对象之间的依赖关系,如下面来自于idior 给出的代码片断:

public class SimpleNewsletterService:INewsletterService

{
private IEmailSender_sender;

private ITemplateEngine_templateEngine;

public SimpleNewsletterService(

[Dependency(CreateType
= typeof (SmtpEmailSender))]

IEmailSendersender,

[Dependency(CreateType
= typeof (NVelocityTemplateEngine))]

ITemplateEnginetemplateEngine)

{

_sender
= sender;

_templateEngine
= templateEngine;

}


public void Dispatch(Stringfrom,String[]targets,Stringmessage)

{

Stringmsg
= _templateEngine.Process(message);

foreach (Stringtarget in targets)

{

_sender.Send(from,target,msg);

}


}


}

官方主页:http://msdn.microsoft.com/practices/

学习资源:

Niwalker ObjectBuilder 技术内幕:http://blog.csdn.net/niwalker/category/18174.aspx [ 中 文]

浪子学编程系列:http://www.cnblogs.com/walkingboy/category/54596.html [ 中 文]

Idior EnterLib ObjectBuild vs Castle WindsorContainerhttp://www.cnblogs.com/idior/archive/2006/08/15/ObjectBuildvsCastle.html [ 中 文]


四.StructureMap

前面介绍的三个大家可 能都比较熟悉了,这最后一个估计关注的人就比较少了。StructureMap 也是.NET 环境下的一个轻量级依赖注入工具,StructureMap 是 一个灵活的、可扩展的通用“插件”机制的.NET IOC 框架,支持.NET1.12.0 。它与Spring.NET 比较类似,但是它只支持使用Attribute 的 方式,而不能通过XML 文件来配置,这样虽然显得不够灵活,但是它避免了项目比较大时XML 文件的繁琐问题。如下面代码片断所示:

[Pluggable( " SQL " )]

public class SqlDataSource:IDataSource

{
private readonly string _sql;

private readonly IDatabase_database;

public SqlDataSource(IDatabasedatabase, string sql)

{
_sql
= sql;

_database
= database;
}


public DataTableFetchTable()

{

return _database.FetchDataTable(_sql);

}


}


[Pluggable(
" Email " )]

public class EmailAction:IAction

{

public EmailAction( string to, string body) {…}

public void Process(DataTabletable) {…}

}


[Pluggable(
" Daily " )]

public class DailyScheduler:IScheduler

{
public DailyScheduler() {}

public DateTimeGetNextRunTime(DateTimecurrentTime) {…}

}

项目主页:http://structuremap.sourceforge.net/Default.htm

学习资源:

现在只能参考官方文档 了,还没有好的中文文档。

总结

以上简单介绍了.NET 平台下四种不错的IOC 容器框架,具体在项目 中使用哪一个,就是仁者见仁,智者见智了,不过我个人仍然比较推崇Castle

分享到:
评论

相关推荐

    .net开源的综合开发框架wojilu框架.zip

    “我记录”这套源码总共包括 两个部分:一个 .net 平台下的全栈式、轻量级开发框架,包括 ORM、MVC、IOC、AOP、JSON、LOG 等,同时包括全套图文教程;用这个框架开发的 SNS 互联网产品。本产品以 SNS 为基础平台,...

    开源贡献者最多的.net开源web框架ServiceStack.zip

    ServiceStack 是 .Net 和 Mono 的开源框架,相对 WCF,MVC 及 Web API 而言它是开发 Web 服务与 Web 应用的有力替代品。该项目近期宣布他们已经达到超过 100 位合作者的里程碑。 ServiceStack 是一系列事物的综合...

    asp.net知识库

    如何在.NET中实现脚本引擎 (CodeDom篇) .NET的插件机制的简单实现 我对J2EE和.NET的一点理解 难分难舍的DSO(一) InternalsVisibleToAttribute,友元程序集访问属性 Essential .NET 读书笔记 [第一部分] ...

    PHP Dependency Injection:PHP的IoC容器-开源

    这是用于PHP的功能齐全的IoC(控制反转)容器。 您可以使用AutoFac或Ninject for .NET等模块类对其进行配置。

    Spring.Net 1.3.1开源代码

    在使用IoC容器来配置应用程序时,我们既可以用传统的ADO.NET来访问数据库,也可以使用Spring.NET的Hibernate集成代码或ADO.NET抽象层来访问数据库。Spring.NET是非侵入式的,代码对框架本身不会产生任何依赖。

    最新版ASP.NET MVC5+EF6后台管理系统 Ymnets快速开发框架源码 带工作流

    ASP.NET MVC5+EF6后台管理系统 Ymnets快速开发框架源码 带工作流,带部署文档+数据字典,ASP.NET MVC5、EF6、IOC容器依赖注入、EasyUI、分层分模块、基于接口

    SunnyUI.NET 是基于.NET Framework 4.0+、.NET6 框架的开源控件库、、多页面开发框架 .zip

    SpringBoot采用 JavaConfig的方式对Spring进行配置,并且提供了大量的注解,极大的提高了工作效率,比如@Configuration和@bean注解结合,基于@Configuration完成类扫描,基于@bean注解把返回值注入IOC容器。...

    支持.Net和.Net Core的网站框架ZKWeb.zip

    但不能实现完全兼容本地化支持多语言支持多时区提供了gettext风格的翻译函数测试支持在控制台和网页运行测试支持在测试中重载IoC容器支持在测试中重载Http上下文支持在测试中使用临时数据库项目工具提供创建项目使用...

    nicnet:.NET组件

    超快速的XML可配置的类似Spring的IoC容器 | 灵活的与数据库无关的数据访问层 | 虚拟文件系统层 | EAV存储引擎 | 这些组件也可以作为nuget包提供。 版权和许可 NIC.NET版本1.0:copyright:2005-2008 NewtonIdeas.com...

    castle学习资料(自己整理,包含实例代码)

    Castle是针对.NET平台的一个开源项目,从数据访问框架ORM到IOC容器,再到WEB层的MVC框架、AOP,基本包括了整个开发过程中的所有东西,为我们快速的构建企业级的应用程序提供了很好的服务. 该文件是chm格式,包含两...

    JAVA(Spring)入门.doc

    Spring是一个开源框架,是为了解决企业应用开发的复杂性创建的,但现在已不止应用于...容器:包含并管理应用对象的配置和生命周期,所以它是一种容器; 框架:将简单的组件配置、组合成为复杂的应用,所以它是框架;

    Castle 开发系列文章

    Castle是针对.NET平台的一个开源项目,从数据访问框架ORM到IOC容器,再到WEB层的MVC框架、AOP,基本包括了整个开发过程中的所有东西,为我们快速的构建企业级的应用程序提供了很好的服务。4月份以来,Terrylee写了一...

    ABP框架中的日志功能完全解析

    译者注释:Castle是什么:Castle是针对.NET平台的一个开源项目,从数据访问框架ORM到IOC容器,再到WEB层的MVC框架、AOP,基本包括了整个开发过程中的所有东西。ASP.NET Boilerplate的ioc容器就是通过Castl

    剖析ASP.NET MVC的DependencyResolver组件

     DependencyResolver是MVC中一个重要的组件,从名字可以看出,它负责依赖对象的解析,可以说它是MVC框架内部使用的一个IOC容器。MVC内部很多对象的创建都是通过它完成的,或许我们平时没有直接用到它,但是如果你在...

    JdonFramework开源框架 v6.6.zip

     JF诞生于2004年底,作为中国第一个开源框架,创新地运用了当时刚刚出现的新的技术思想Ioc/DI(依赖注射Dependency Injection),JF是一个支持autowiring的DI框架;同时遵循约定优于配置(Convention Over ...

    JdonFramework开源框架 v6.6

    JF诞生于2004年底,作为中国第一个开源框架,创新地运用了当时刚刚出现的新的技术思想Ioc/DI(依赖注射Dependency Injection),JF是一个支持autowiring的DI框架;同时遵循约定优于配置(Convention Over ...

    Castle 开发系列文章CHM

    Castle是针对.NET平台的一个开源项目,从数据访问框架ORM到IOC容器,再到WEB层的MVC框架、AOP,基本包括了整个开发过程中的所有东西,为我们快速的构建企业级的应用程序提供了很好的服务。

    详解ABP框架中的日志管理和设置管理的基本配置

    日志管理 Server side(服务器端) ...译者注释:Castle是什么:Castle是针对.NET平台的一个开源项目,从数据访问框架ORM到IOC容器,再到WEB层的MVC框架、AOP,基本包括了整个开发过程中的所有东西。ASP.NET Boi

    毕业设计企业网站源码-Timor.Cms:一款超级轻量级的,基于.NETCore的CMS系统

    Autofac作为IOC容器 功能特性 前台站点 官网首页 新闻列表页 专栏页(关于我们,公司简介等) 新闻详情页 站内搜索 管理后台 用户登录 新闻分类管理 新闻管理、编辑 专栏管理 LOGO管理 页面广告管理(轮播、Banner) ...

    di-with-ninject-dncmag-01:在ASP.NET MVC应用程序中使用Ninject实现依赖项注入。 源代码已在DNC杂志第01期中进行了说明。该杂志“完全免费”,您可以在这里获取-mvc source code

    使用Ninject作为IoC容器构建一个简单的ASP.NET MVC博客应用程序。 源代码已在DNC杂志第01期中进行了说明。该杂志是完全免费的,您可以在此处获得 作者:Sumit Maitra 推特: 日期:2012年7月 版本:0.0.1 网站...

Global site tag (gtag.js) - Google Analytics