.NET开源项目介绍及资源推荐:IOC容器篇
时间 2020-09-26
标签
开源
项目
介绍
资源
推荐
ioc
容器
关于IOC的概念就很少说了,在.NET平台下,比较优秀的IOC容器框架有以下四种,本文试图做一个简单的介绍,以及推荐一些各个框架的学习资源。
一.Castle
在Castle中包含了一组开发框架,它里面的IOC容器是Windsor,目前Castle已经发布了RC1版本,其中Windsor已是RC3了。在Windsor中提出了自动装配的概念,由容器来自动管理组件之间的依赖关系,无需用户去编写XML配置文件或者经过Attribute来指定容器之间的依赖关系。这样在使用上很是的简单,同时也带了一些问题,做为开发人员的咱们没法控制组件的依赖关系。以下面的XML配置文件,仅仅是设定了组件的参数而已:
<?
xml version="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()
{
IWindsorContainer container = new WindsorContainer(new XmlInterpreter("[url]http://www.cnblogs.com/BasicUsage.xml[/url]"));
container.AddComponent("myMainComponent",
typeof(MyMainComponent));
container.AddComponent("myComponent1",
typeof(MyComponent1));
container.AddComponent("myComponent2",
typeof(MyComponent2));
}
}
学习资源:
TerryLee
的Castle系列:
二.Spring.NET
Spring.NET
是从java的Spring Framework移植过来的,如今版本应该是Spring.NET 1.0.2。正好和前面说的Castle相反,Spring.NET推崇作法是使用配置文件来管理组件之间的依赖关系,固然它也支持自动装配,不过不推荐使用。这样使用配置文件的方式,带来的问题是当项目很是大的时候,配置文件会很是的繁琐,手工配置会变得很复杂,以下面的配置文件,须要指定每个组件以及它们之间的依赖关系:
<?
xml version="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
>
学习资源:
三.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))]
IEmailSender sender,
[Dependency(CreateType = typeof(NVelocityTemplateEngine))]
ITemplateEngine templateEngine)
{
_sender = sender;
_templateEngine = templateEngine;
}
public void Dispatch(String from, String[] targets, String message)
{
String msg = _templateEngine.Process(message);
foreach (String target in targets)
{
_sender.Send(from, target, msg);
}
}
}
学习资源:
四.StructureMap
前面介绍的三个你们可能都比较熟悉了,这最后一个估计关注的人就比较少了。StructureMap也是.NET环境下的一个轻量级依赖注入工具,StructureMap是一个灵活的、可扩展的通用“插件”机制的.NET IOC框架,支持.NET1.1和2.0。它与Spring.NET比较相似,可是它只支持使用Attribute的方式,而不能经过XML文件来配置,这样虽然显得不够灵活,可是它避免了项目比较大时XML文件的繁琐问题。以下面代码片段所示:
[Pluggable(
"
SQL
"
)]
public
class
SqlDataSource : IDataSource
{
private readonly string _sql;
private readonly IDatabase _database;
public SqlDataSource(IDatabase database, string sql)
{
_sql = sql;
_database = database;
}
public DataTable FetchTable()
{
return _database.FetchDataTable(_sql);
}
}
[Pluggable(
"
Email
"
)]
public
class
EmailAction : IAction
{
public EmailAction(string to, string body){…}
public void Process(DataTable table){…}
}
[Pluggable(
"
Daily
"
)]
public
class
DailyScheduler : IScheduler
{
public DailyScheduler(){}
public DateTime GetNextRunTime(DateTime currentTime){…}
}
学习资源:
如今只能参考官方文档了,尚未好的中文文档。
总结
以上简单介绍了.NET平台下四种不错的IOC容器框架,具体在项目中使用哪个,就是仁者见仁,智者见智了,不过我我的仍然比较推崇Castle。