AutoFac簡介

     在.NET上如今存在許多的依賴注入容器, 如:Castle Windsor、StructureMap、Autofac 、Unity。html

     這裏主要介紹一下Autofac,Autofac和其餘容器的不一樣之處是它和C#語言的結合很是緊密,在使用過程當中對你的應用的侵入性幾乎爲零,更容易與第三方的組件集成。Autofac的主要特性以下:git

    1)靈活的組件實例化:Autofac支持自動裝配,給定的組件類型Autofac自動選擇使用構造函數注入或者屬性注入,Autofac還能夠基於lambda表達式建立實例,這使得容器很是靈活,很容易和其餘的組件集成。 github

        var defaultLog = new ConsoleLog();  設計模式

        builder.Register(c => new Connection(){ Log = c.ResolveOptional<ILog>() ?? defaultLog });模塊化

    你們知道lambda表達式並非在聲明的時候的執行的,只有等到容器的Resolve()方法調用的時候,表達式才執行。表達式還有一個好處是不須要使用反射或者是使用XML語法來表達。函數

    2)資源管理的可視性:基於依賴注入容器構建的應用程序的動態性,意味着何時應該處理哪些資源有點困難。Autofac經過跟蹤特定做用域內的實例和依賴來解決這個問題(DeterministicDisposal)。IDisposable接口是把雙刃劍,既是一個老孫手上的金箍棒,也是老孫頭上的魔咒,有一種明確的方式告訴哪一部分應該被清理,可是一個組件要什麼時候處理並非很容易肯定的事情,好比說一個服務能夠有多個實現的時候就變得很糟糕,組件的建立上(GOF的建立型設計模式)有的是經過工廠方式建立的,有的是單件【單例】方式建立的,有些須要被清理,有些卻不須要清理。組件的使用者沒法知道是否應轉換IDisposable接口調用它的Disposal方法。Autofac經過容器來跟蹤組件的資源管理。對於不須要清理的對象,例如Console.Out,咱們調用ExternallyOwned()方法告訴容器不用清理。細粒度的組件生命週期管理,應用程序中一般能夠存在一個應用程序範圍的容器實例,在應用程序中還存在大量的一個請求的範圍的對象,例如一個HTTP請求,一個IIS工做者線程或者用戶的會話結束時結束。經過嵌套的容器實例和對象的做用域使得資源可視化。網站

    3)Autofac的設計上很是務實,這方面更可能是爲咱們這些容器的使用者考慮:ui

  • 組件侵入性爲零:組件不須要去引用Autofac;
  • 靈活的模塊化系統:經過模塊化組織你的程序,應用程序不用糾纏於複雜的XML配置系統或者是配置參數;
  • 自動裝配:能夠是用lambda表達式註冊你的組件,autofac會根據須要選擇構造函數或者屬性注入;
  • XML配置文件的支持:XML配置文件過分使用時很醜陋,可是在發佈的時候一般很是有用;
  • 組件的多服務支持:許多設計師喜歡使用細粒度的接口來控制依賴 , autofac容許一個組件提供多個服務;

     參考資料:url

     AutoFac文檔
spa

     http://alexmg.com/?tag=/autofac

     https://www.codeproject.com/Articles/25380/Dependency-Injection-with-Autofac

     官網網站https://autofac.org/

     源碼下載地址https://github.com/autofac/Autofac

 

參考連接:http://www.cnblogs.com/shanyou/archive/2010/02/07/1665451.html

相關文章
相關標籤/搜索