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的创业产品Worktile
Worktile,新一代简单好用、体验极致的团队协同、项目管理工具,让你和你的团队随时随地一起工作。完全免费,现在就去了解一下吧。
https://worktile.com
Worktile,新一代简单好用、体验极致的团队协同、项目管理工具,让你和你的团队随时随地一起工作。完全免费,现在就去了解一下吧。
https://worktile.com