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

posted on 2008-01-16 00:09 TerryLee 阅读(5176) 评论(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 怪怪      

这不应该是相关社群的灾难, 而是新的开始: 可以直接走的更高更远. 除非所谓的相关社群只有一口水井的深度, 却认为自己已经挖到了石油.   回复  引用  查看    

#12楼  2008-01-16 07:49 自由、创新、研究、探索……      

微软推什么就流行什么,对.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      

@Awen
4.0还未发布,正在开发当中,建议先从EL3.1学起,在EL3.1中,除了PIAB和VAB之外其它的六个应用程序块都和以前的使用方式差不多,可以看看我以前写的一些关于EL的文章
http://www.cnblogs.com/Terrylee/archive/2006/08/01/464591.html

等EL4.0出来之后,我会再写一些相应的文章的。   回复  引用  查看    

#44楼 [楼主] 2008-01-16 17:13 TerryLee      

@文艳将
:)   回复  引用  查看    

#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 编辑过
 

另存  打印
最新IT新闻:
· 阿里巴巴确立未来十年战略规划 修改自身定位
· 微软高管:Wii用户最终会成为Xbox 360用户
· 遵守YouTube案裁定 谷歌将陷入隐私指控深渊
· iPhone入华在即 中国手机产业生存面临考验
· 阿里巴巴集团再向淘宝注资20亿元
 


导航

公告

  • 网名:TerryLee
  • 本名:李会军
  • 位置:中国北京 Ethos
  • 联系方式:
  • 个人主页

 MVP配置

 版权声明

  • 本站采用创作共用许可 署名,非商业

绿色通道

IT新闻

统计

与我联系

留言簿(311)

我的标签

随笔分类

随笔档案

个人站点

关注项目

好的网站

我的好友