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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介:
关于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));

    }


}
学习资源:
叶子的家:[url]http://wj.cnblogs.com/[/url][中文]
TerryLee Castle系列:
Ayende 一篇非常棒的文章:[url]http://msdn2.microsoft.com/en-us/library/aa973811.aspx[/url][英文]

二.Spring.NET
Spring.NET 是从javaSpring 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);

        }


    }


}
学习资源:
Niwalker ObjectBuilder技术内幕:[url]http://blog.csdn.net/niwalker/category/18174.aspx[/url][中文]
Idior EnterLib ObjectBuild vs Castle WindsorContainer[url]http://www.cnblogs.com/idior/archive/2006/08/15/ObjectBuildvsCastle.html[/url][中文]

四.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(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










本文转自lihuijun51CTO博客,原文链接: http://blog.51cto.com/terrylee/67590  ,如需转载请自行联系原作者
相关文章
|
1月前
|
C#
一个.NET开源、轻量级的运行耗时统计库 - MethodTimer
一个.NET开源、轻量级的运行耗时统计库 - MethodTimer
|
1月前
|
消息中间件 监控 数据可视化
基于.NET开源、功能强大且灵活的工作流引擎框架
基于.NET开源、功能强大且灵活的工作流引擎框架
|
1月前
|
JavaScript 前端开发 API
精选5个.NET开源且免费的通用权限管理系统
精选5个.NET开源且免费的通用权限管理系统
|
1月前
|
开发框架 网络协议 .NET
C#/.NET/.NET Core优秀项目和框架2024年10月简报
C#/.NET/.NET Core优秀项目和框架2024年10月简报
|
2月前
|
关系型数据库 C# 数据库
.NET 8.0 开源在线考试系统(支持移动端)
【10月更文挑战第27天】以下是适用于 .NET 8.0 的开源在线考试系统(支持移动端)的简介: 1. **基于 .NET Core**:跨平台,支持多种数据库,前后端分离,适用于多操作系统。 2. **结合 Blazor**:使用 C# 开发 Web 应用,支持响应式设计,优化移动端体验。 3. **基于 .NET MAUI**:跨平台移动应用开发,一套代码多平台运行,提高开发效率。 开发时需关注界面设计、安全性与稳定性。
|
1月前
|
网络协议 Unix Linux
精选2款C#/.NET开源且功能强大的网络通信框架
精选2款C#/.NET开源且功能强大的网络通信框架
|
1月前
|
机器学习/深度学习 文字识别 并行计算
一款.NET开源的屏幕实时翻译工具
一款.NET开源的屏幕实时翻译工具
|
1月前
|
开发框架 安全 .NET
.NET使用Moq开源模拟库简化单元测试
.NET使用Moq开源模拟库简化单元测试~
|
2月前
|
开发框架 前端开发 API
C#/.NET/.NET Core优秀项目和框架2024年9月简报
C#/.NET/.NET Core优秀项目和框架2024年9月简报
|
2月前
|
Linux C# Android开发
.NET开源跨平台桌面和移动应用的统一框架 - Eto.Forms
.NET开源跨平台桌面和移动应用的统一框架 - Eto.Forms
155 1
下一篇
DataWorks