概述
之前我曾发过一篇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(string key) { } public IEnumerable GetAll() { } // type mapping public UnityContainer Register(string key) where TTo : TFrom { } // singleton support public UnityContainer SetSingleton(string key) { } // support for registering existing objects public UnityContainer RegisterInstance(T existing, string key, bool overload) { } // running existing objects through the container public T BuildUp(T existing, string key) { } }
典型使用
在Unity中,我们可以像如下代码这样加入组件:
UnityContainer container = new UnityContainer()
.Register()
.Register();
获取对象实例:
ISomething some = container.Get();
用过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
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12184684/viewspace-531834/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/12184684/viewspace-531834/