`

.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

分享到:
评论

相关推荐

    23个.NET开源项目

    ### 23个.NET开源项目:深度解析与应用价值 ...总体而言,这23个.NET开源项目覆盖了从测试、数据访问、架构设计到工具库的各个方面,为.NET开发者提供了丰富的资源和工具,极大地促进了.NET生态的繁荣和发展。

    .net 轻量级ioc实现

    本文将深入探讨如何使用单个.CS文件实现一个简单的IOC容器,并介绍其关键特性。 1. IOC原理: IOC,即控制反转,核心思想是将对象的创建和依赖关系的管理交给外部容器处理,而不是由对象自身负责。这样,对象间的...

    VS.NET开源框架

    VS.NET 开源框架 在企业级开源软件大盘点中,VS.NET 开源框架是一个重要的组成部分。这个开源框架包括了多个子项目,每个子项目都有其特点和优势。下面是对这些子项目的详细介绍: 1. Castle Castle 是一个 .NET ...

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

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

    Spring.net二----初探IOC容器.rar源代码

    Spring.Demo项目很可能是包含一个简单的Spring.NET应用示例,可能包括了XML配置文件、服务接口和实现类、以及如何使用IoC容器来获取和使用这些对象的代码。通过这个示例,你可以更直观地了解如何在实际项目中运用...

    ASP.NET+MVC+ENTLIB+LOG4NET+IOC

    在ASP.NET MVC中,IOC容器可以用来管理对象的生命周期,自动注入依赖,使代码更加可测试和可维护。开发者可以通过配置IOC容器(如Unity或Autofac)来控制对象如何被创建和依赖如何被满足。 在"LoggingDemo"这个示例...

    .net+mvc+ioc的权限后台

    标题中的".net+mvc+ioc的权限后台"指的是基于.NET框架、使用MVC(Model-View-Controller)...开发者可以通过分析和学习这个项目,提升自己在.NET MVC和IOC容器方面的技能,同时了解如何实现一个完整的权限管理系统。

    基于.NET 8.0的Web API项目

    抽时间来搭建个简单的三层架构模式的web api项目. 技术点大概如下:三层架构+EFCore+.Net 8.0 Web Api+AutoMap+IOC容器。项目比较简单和粗糙,但是完整,适合学习和练手。

    【ASP.NET编程知识】ASP.NET MVC实现依赖注入的完整过程.docx

    2. 实现 IOC 容器:IOC 容器(Inversion of Control Container)是依赖注入的核心组件,负责管理和提供对象实例。在 ASP.NET MVC 中,可以使用开源框架 AutoFac 等,也可以自己实现一个轻量级的 IOC 容器。 3. 标记...

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

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

    asp.net+mvc+ef+ioc多语言通用后台框架

    在ASP.NET MVC项目中,可以使用资源文件来存储不同语言的字符串,然后根据用户设置或浏览器的区域信息动态加载相应的语言资源。这样,开发者可以轻松地添加新的语言,并为用户提供本地化的体验。 【后台框架】 后台...

    spring.net IOC例子

    这个例子旨在帮助初学者理解如何在实际项目中使用Spring.NET的IOC容器来管理对象的生命周期和依赖关系,同时结合数据库操作和事务管理。 在Spring.NET中,IOC容器是核心组件,它负责创建、配置和管理应用程序中的...

    Spring.NET_Document_参考文档 推荐一下

    此外,Spring.NET与其他开源项目如NHibernate、Autofac等有很好的集成,构建出丰富的.NET开发生态。 学习Spring.NET的参考文档是理解并熟练使用该框架的关键。文档通常会详细讲解每个组件的用法、配置示例、最佳...

    Spring.net-2.0.1GA版项目文件

    Spring.NET是中国开源软件促进会(OSChina)引入并维护的一个.NET平台上的轻量级框架,它是对Java Spring框架的一种移植,旨在为.NET开发者提供一种强大的依赖注入(DI)和面向方面的编程(AOP)解决方案。...

    Spring.net和IBatis.net集成Web DEMO,可以使用vs2013打开,需要了解的同学可以下载了。

    这包括了控制器、视图和模型的组织,以及如何通过Spring.NET的IoC容器将这些组件连接在一起,同时利用iBatis.NET进行数据库操作。 6. **学习要点**: - 了解Spring.NET的核心概念,如依赖注入和AOP。 - 学习如何...

    ASP.NET MVC Porject: MyFiance

    在ASP.NET MVC3中,可以通过集成如 Autofac、Unity 或 Ninject 等第三方IoC容器,实现对对象的生命周期管理和依赖关系的解耦。例如,在MyFinance项目中,IoC容器可能被用来管理数据库连接、业务服务和控制器之间的...

    项目中的.NET 一书源码

    《项目中的.NET》一书的源码集合是一个宝贵的资源,对于深入理解和学习.NET框架,特别是ASP.NET技术,具有很高的价值。这本书的源码涵盖了多个实际项目案例,为开发者提供了丰富的实践素材,帮助他们将理论知识转化...

    Spring.net结合Webservice

    1. **Spring.NET IoC容器**:IoC容器是Spring.NET的核心,负责对象的创建、配置和管理。在Webservice项目中,IoC容器可以用来管理服务的生命周期,例如,自动创建并注入依赖的服务实例,使得代码更易于测试和解耦。 ...

    C#实现的IOC和AOP框架,供学习

    在C#中,通常通过接口和抽象类来实现依赖注入,同时可以利用微软的Unity、Autofac或Ninject等第三方IOC容器来简化这一过程。IOC容器负责解析依赖关系,根据配置自动创建对象并注入到其他对象中,使得代码更加灵活。 ...

Global site tag (gtag.js) - Google Analytics