Enterprise Library 4.0中的依賴注入容器(Unity)預覽

TerryLee1109發表於2009-01-08

概述

之前我曾發過一篇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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章