Enterprise Library 4.0中的依赖注入容器(Unity)预览

概述

之前我曾发过一篇Enterprise Library 4.0开发计划中提到微软在Enterprise Library 4.0将加入依赖注入容器,暂定名为DIAB,现在微软终于给它起了个正式的名字Unity,难道是“团结”的意思?:),在Unity最终将以两种形式发布:独立的容器组件和作为Enterprise Library 4.0的一部分,用微软的话说“它是一个轻量级的、可扩展的依赖注入容器”,在ASP.NET MVC Framework推出后引起了业界极大的讨论“MS MVC框架漩涡中的MonoRail未来”,不知道Unity推出之后会不会再出现一场“Unity漩涡中的Castle Windsor未来”或者“Unity漩涡中的Spring.Net未来”的讨论。这里先带您提前预览一下Unity。

Unity预览

在Unity中将提供Register方法来注册对象映射,使用Get方法获得对象的实例,基本API如下:

public class UnityContainer : IDisposable
{
    // getting objects
    public T Get<T>(string key) { }

    public IEnumerable<T> GetAll<T>() { }

    // type mapping
    public UnityContainer Register<TFrom, TTo>(string key) where TTo : TFrom { }

    // singleton support
    public UnityContainer SetSingleton<T>(string key) { }

    // support for registering existing objects
    public UnityContainer RegisterInstance<T>(T existing, string key, bool overload) { }

    // running existing objects through the container
    public T BuildUp<T>(T existing, string key) { }
}

典型使用

在Unity中,我们可以像如下代码这样加入组件:

UnityContainer container = new UnityContainer()
              .Register<ILogger, TraceLogger>()
              .Register<ISomething, Something>();
获取对象实例:
ISomething some = container.Get<ISomething>();

用过Castle的朋友一定还记得,这似乎和Castle中的IOC容器非常像,在Castle的IOC容器中加入组件:

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

container.AddComponent( "txtLog", typeof(ILog), typeof(TextFileLog) );

container.AddComponent( "format", typeof(ILogFormatter), typeof(TextFormatter) );

获取对象实例:

ILog log = (ILog)container["txtLog"];

二者是不是有几分相似呢?不知道Unity会给我们带来哪些惊喜?

结束语

在ASP.NET MVC Framework推出后引起了业界极大的讨论“MS MVC框架漩涡中的MonoRail未来”,不知道Unity推出之后会不会再出现一场“Unity漩涡中的Castle Windsor未来”或者“Unity漩涡中的Spring.Net未来”的讨论。不管怎么说,微软推出Unity,我们又多了一种可供选择的依赖注入容器。
参考:DIAB is now Unity

作者:TerryLee
出处:http://terrylee.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
posted @ 2008-01-16 00:09 TerryLee 阅读(5616) 评论(62)  编辑 收藏 所属分类: Unity Application Block

  回复  引用  查看    
#1楼 2008-01-16 00:14 | lexus      
大哥真是神人,跟进的速度好快啊
  回复  引用  查看    
#2楼 [楼主]2008-01-16 00:15 | TerryLee      
@lexus
呵呵,谢谢,今天在老外的一篇博客上看到了,就顺便写一下。

// 我会随时关注EL4.0的进展的:)
  回复  引用    
#3楼 2008-01-16 00:17 | 留名 [未注册用户]
看代码,非常像OB
  回复  引用  查看    
#4楼 2008-01-16 00:18 | Justin      
这个有点搞头!
  回复  引用  查看    
#5楼 [楼主]2008-01-16 00:19 | TerryLee      
@留名
估计将来与OB不太一样
  回复  引用  查看    
#6楼 [楼主]2008-01-16 00:20 | TerryLee      
@Justin
呵呵,微软还是强,什么东西都搞了:)
  回复  引用    
#7楼 2008-01-16 00:22 | e2mars [未注册用户]
很好,很强大。
  回复  引用  查看    
#8楼 [楼主]2008-01-16 00:22 | TerryLee      
@e2mars
最近好流行这个词:)
  回复  引用  查看    
#9楼 2008-01-16 01:00 | Jeffrey Zhao      
微软养了一大堆人,不多搞点出来怎么可以呢?
不过看这些东西……好像普通人也能随随便便写出来的说……
  回复  引用    
#10楼 2008-01-16 01:10 | e2mars [未注册用户]
老赵,这么晚还没睡啊。

怎么感觉MS一搞点什么动作,就要给相关社群带来灾难一样,
.NET没JAVA和谐啊,呵呵。
  回复  引用  查看    
#11楼 2008-01-16 04:04 | 怪怪      
这不应该是相关社群的灾难, 而是新的开始: 可以直接走的更高更远. 除非所谓的相关社群只有一口水井的深度, 却认为自己已经挖到了石油.
微软推什么就流行什么,对.net社区的技术进步推动作用不可低估。试想mvc,ioc这些概念在.net社区存在多长时间了,只要微软一出手,.net社区就活了。微软战线太长了,做的不一定好,开源和微软互相补充。
  回复  引用  查看    
#13楼 2008-01-16 08:19 | kiler      
微软推一下大家才会用,很多.net开发人员就是这个毛病,微软不出,他就不用,这么想想也是有好处的。

Unity想要代替Castle和spring.net估计比较难,毕竟这两项目都做了好多年了,不是那么容易取代的。

不过我更倾向于微软多做点.net社区没有的东西,别老是搞重复建设,比如说去抄抄Apache的项目,别老抄自家人的东西嘛。
  回复  引用  查看    
#14楼 2008-01-16 08:27 | 浪子      
期待一下,希望看到和OB不一样的思想,否则就没啥意义了。
  回复  引用  查看    
#15楼 [楼主]2008-01-16 08:35 | TerryLee      
@Jeffrey Zhao
呵呵,现在还只能说是一个最基本的原型,不知道最终的功能如何
  回复  引用  查看    
#16楼 [楼主]2008-01-16 08:36 | TerryLee      
@e2mars
我觉的这不是什么社区灾难,而应该是给社区带来了活力:)
  回复  引用  查看    
#17楼 [楼主]2008-01-16 08:37 | TerryLee      
@怪怪
怪怪兄“一语中的”
  回复  引用  查看    
#18楼 [楼主]2008-01-16 08:38 | TerryLee      
@自由、创新、研究、探索……
的确是,从ASP.NET MVC Framework就可以看出这一点!
  回复  引用  查看    
#19楼 [楼主]2008-01-16 08:40 | TerryLee      
@kiler
呵呵,微软今年连着做了好几件重复的东西,不过这样也好,虽然重复,但是对于社区的推动作用还是很大的:)
  回复  引用  查看    
#20楼 [楼主]2008-01-16 08:41 | TerryLee      
@浪子
应该和OB是不一样的
  回复  引用  查看    
#21楼 2008-01-16 09:38 | 麒麟.NET      
已经4.0了?天哪,太快了!……
  回复  引用  查看    
#22楼 2008-01-16 09:39 | kiler      
@TerryLee
对社区是不是推动不好说,NDoc,Nant,NUnit就是例子。

其实微软也可以考虑和社区合作,不一定要自己出这样的东西啊,微软还可以节约点开发成本,何乐不为之呢。
  回复  引用  查看    
#23楼 [楼主]2008-01-16 09:44 | TerryLee      
@麒麟.NET
是啊,不过4.0还没有出来,正在开发当中。
  回复  引用  查看    
#24楼 2008-01-16 09:46 | kevin002      
MS的东西发展的太快了,学MS的东西,真的感觉很累...
  回复  引用  查看    
#25楼 [楼主]2008-01-16 09:47 | TerryLee      
@kiler
我觉的从微软推出ASP.NET MVC Framework这一点来看,还是有一定的推动作用的。

其实微软也有过和社区合作,比如说SubSonic,据说作者已经被微软明媒正娶进门,专门做SubSonic开发
  回复  引用  查看    
#26楼 [楼主]2008-01-16 09:48 | TerryLee      
@kevin002
微软推出了VS2008,Enterprise Library必须跟上啊,至少得支持VS2008。

不过微软的东西推出的是比较快
  回复  引用  查看    
#27楼 2008-01-16 09:55 | Klesh Wong      
怎么这个API不是interface的形式,而是concreate class? weird...
  回复  引用  查看    
#28楼 [楼主]2008-01-16 10:00 | TerryLee      
@Klesh Wong
这个只是最原始的原型,最终的实现未必就是这样子的,但肯定会保留Register和Get这样的方法
  回复  引用  查看    
#29楼 2008-01-16 10:10 | kiler      
@TerryLee

微软现在确实在改变,IronPython的作者也是被聘过去做专职开发的,但是希望这样的合作能更多点.

不过微软对castle可没那么友善
——————————以下摘自博客堂一段评论———————————
# 回复: 微软推出MVC框架之后MonoRail将何去何从 2007-11-23 8:30 eidolon
如果没有记错的话,记得Hamilton当初是去MS面试过的,只不过当初MS方面的人说如果加入微软就必须放弃castle,放弃opensource,Hamilton还在blog上面嘲讽了一把MS,没想到几年后是现在这个局面,呵呵,有意思.
————————————————————————————————


  回复  引用  查看    
#30楼 [楼主]2008-01-16 10:15 | TerryLee      
@kiler
对,还有IronPython。是不是当初因为这个微软才对Castle下手的,如现在MVC框架、IOC容器。再过一段时间之后,会不会Castle中有的东西,微软都会推出相应的东西呢,呵呵
  回复  引用  查看    
#31楼 2008-01-16 10:29 | kiler      
其实比较好的方式应该是:社区里面已有的比较成熟的东西如:orm,ioc,MVC,微软和社区一起做,避免重复,这样即节约开发成本,又能促进社区发展,社区没有或者是有但是不成熟的东西,像工作流、缓存框架、调度框架、动态语言、规则引擎、web爬虫等等,这些东西完全就可以由微软牵头来做嘛,说真的微软现在还真没到不做重复开发就没事做的地步。

其实说这么多东西,还是希望.Net能有更好发展能有更广泛的应用。
  回复  引用    
#32楼 2008-01-16 10:32 | wfe [未注册用户]
@kiler
这是有原因的,MS员工,一般情况下不允许接触(包括阅读)开源软件的代码,以免带来版权问题。当时,MS想必没有想要把Castle收归己有,所以Hamilton应该是面试的其他项目的职位,不允许同时搞开源的东西是正常的。
  回复  引用  查看    
#33楼 [楼主]2008-01-16 10:46 | TerryLee      
@kiler
有些东西如果微软不做,似乎在.NET社区就用不起来,MVC、ORM哪一个都是如此。不过看到微软这几年在开源上所做的努力,也算不错了,呵呵,套用你那句话“希望.Net能有更好发展能有更广泛的应用”:)
  回复  引用  查看    
#34楼 [楼主]2008-01-16 10:47 | TerryLee      
@wfe
原来如此:)
  回复  引用    
#35楼 2008-01-16 13:18 | 5503 [未注册用户]
LZ's blog底色很黄,ms很暴力...
  回复  引用  查看    
#36楼 [楼主]2008-01-16 13:32 | TerryLee      
@5503
晕-_-

// 最近怎么这么流行这词啊

  回复  引用  查看    
#37楼 2008-01-16 14:24 | Michael Wang      
scott 周一说framework source code这两天就会部署好了,mvc在late spring发布...
  回复  引用  查看    
#38楼 [楼主]2008-01-16 14:47 | TerryLee      
@Michael Wang
嗯,.NET Framework源码应该快发布了
  回复  引用  查看    
#39楼 2008-01-16 16:41 | 蓝天旭日      
文章总是比较有价值!
支持!
  回复  引用  查看    
#40楼 2008-01-16 16:58 | Awen      
EL现在4.0了,那初学者该怎么学起呢,能否给个思路!
  回复  引用    
#41楼 2008-01-16 17:08 | 文艳将 [未注册用户]
刚学
看不懂怎么办 学学了
  回复  引用  查看    
#42楼 [楼主]2008-01-16 17:09 | TerryLee      
@蓝天旭日
呵呵:)
  回复  引用  查看    
#43楼 [楼主]2008-01-16 17:13 | TerryLee      
@文艳将
:)
  回复  引用  查看    
#44楼 [楼主]2008-01-16 17:13 | TerryLee      
@Awen
4.0还未发布,正在开发当中,建议先从EL3.1学起,在EL3.1中,除了PIAB和VAB之外其它的六个应用程序块都和以前的使用方式差不多,可以看看我以前写的一些关于EL的文章
http://www.cnblogs.com/Terrylee/archive/2006/08/01/464591.html

等EL4.0出来之后,我会再写一些相应的文章的。
  回复  引用  查看    
#45楼 2008-01-16 17:31 | Awen      
@TerryLee
恩,知道了,谢谢!:)
  回复  引用  查看    
#46楼 2008-01-16 19:33 | 李华星      
谢谢LZ, 总能在这里获得最新的MS技术
  回复  引用  查看    
#47楼 [楼主]2008-01-16 20:11 | TerryLee      
@李华星
呵呵,客气了
  回复  引用    
#48楼 2008-01-16 20:20 | 迷途架构师 [未注册用户]
微软的变化太快了,跟着微软好辛苦!
  回复  引用  查看    
#49楼 [楼主]2008-01-16 20:26 | TerryLee      
@迷途架构师
其实还行吧,EL中除了加入了IOC和支持VS2008之外,变化都不会太大...
  回复  引用  查看    
#50楼 2008-01-16 22:28 | 杨正祎      
lee兄弟文章,真是技术含量和美观并存。华丽~赞一个!
  回复  引用  查看    
#51楼 [楼主]2008-01-16 23:00 | TerryLee      
@杨正祎
呵呵,多谢:)
  回复  引用    
#52楼 2008-01-17 09:50 | Grigori Melnik [未注册用户]
Terry 和朋友们,感谢传递有关Unity和您向我们提供反馈。要说清楚,我们在Patterns & practices推出Unity,是为支持我们认为是一个很好的,行之有效的做法(使用依赖注入,为建设松散耦合的应用软件,使它们更可测试和维修容易). 在这里的首要目标是,使P&P的资产更对container友善,并更容易使用。

关于改进版本的Enterprise Library 4 - 我们将使任何container容易使用-无论是Uinty或Castle或Spring.NET或StructureMap. (见 http://blogs.msdn.com/agile/archive/2007/12/03/making-dependency-injection-simpler-in-entlib-4.aspx). 我们不想强迫客户选择一种Container。

请继续发送您的反馈。我们将全力倾听!

  回复  引用  查看    
#53楼 [楼主]2008-01-17 09:55 | TerryLee      
@Grigori Melnik
Grigori Melnik中文说的这么好?:)

谢谢,我会随时关注EL4.0的进展的:)
  回复  引用  查看    
#54楼 2008-01-18 01:30 | BirdsHover      
不错
  回复  引用    
#55楼 2008-02-19 14:11 | chenlutan [未注册用户]
对研究技术方面有很大的兴趣,但是无从下手,望有人能帮帮我
  回复  引用    
#56楼 2008-02-19 14:13 | chenlutan [未注册用户]
楼主,希望你能帮帮我,就是对技术方面该如何下手,麻烦 你发到我的邮箱里面
  回复  引用    
#57楼 2008-02-21 18:10 | 郁闷 [未注册用户]
我真是郁闷啊。微软老是这么调人胃口,让不让人活了。我还是用我的spring.net吧。。。castle的老大真是是要郁闷死了。。。先是monorail然后是windsor。。。蚕食啊。。。
  回复  引用  查看    
#58楼 [楼主]2008-02-21 19:12 | TerryLee      
@郁闷
呵呵,过几天我会写一些关于Unity的文章。

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-03-02 10:44 编辑过


相关链接: