在.net上現在存在許多的依賴注入容器, 我也在實踐中使用過castle windsor、structuremap、autofac、unity。這些容器的簡要介紹可以參看:
ioc in .net part 1: autofac
ioc in .net part2: structuremap
ioc in .net part 3: ninject 2 beta
ioc in .net part4: spring.net
ioc in .net part 5: using castlewindsor container
ioc containers in .net part 6: unity container
這裡主要介紹一下autofac,autofac和其他容器的不同之處是它和c#語言的結合非常緊密,在使用過程中對你的應用的侵入性幾乎為零,更容易與第三方的元件整合。autofac的主要特性如下:
靈活的元件例項化:autofac支援自動裝配,給定的元件型別autofac自動選擇使用建構函式注入或者屬性注入,autofac還可以基於lambda表示式建立例項,這使得容器非常靈活,很容易和其他的元件整合。var defaultlog = new consolelog(); builder.register(c => new connection());
大家知道lambda表示式並不是在宣告的時候的執行的,只有等到容器的resolve()方法呼叫的時候,表示式才執行。表示式還有乙個好處是不需要使用反射或者是使用xml語法來表達。
資源管理的可視性:基於依賴注入容器構建的應用程式的動態性,意味著什麼時候應該處理那些資源有點困難。autofac通過跟蹤特定作用域內的例項和依賴來解決這個問題(deterministicdisposal)。idisposable介面介面是把雙刃劍,既是乙個老孫手上的金箍棒,也是老孫頭上的魔咒,有一種明確的方式告訴那一部分應該被清理,但是乙個元件要何時處理並不是很容易確定的事情,比如說乙個服務可以有多個實現的時候就變得很糟糕,元件的建立上(gof的建立型設計模式)有的是通過工廠方式建立的,有的是單件方式建立的,有些需要被清理,有些卻不需要清理。元件的使用者無法知道是否把轉換為idisposable介面呼叫它的disposal方法。autofac通過容器來跟蹤元件的資源管理。對於不需要清理的物件,例如console.out,我們呼叫externallyowned()方法告訴容器不用清理。細粒度的元件生命週期管理:應用程式中通常可以存在乙個應用程式範圍的容器例項,在應用程式中還存在大量的乙個請求的範圍的物件,例如乙個http請求,乙個iis工作者執行緒或者使用者的會話結束時結束。通過巢狀的容器例項和物件的作用域使得資源的視覺化。
autofac的目前穩定版本是1.4,支援.net和silverlight應用程式。2.1版本目前處於beta狀態,2.1版本相對於1.4版本做了些調整,可以參照如果你對autofac感興趣,盡快開始autofac之旅吧,可以給你不一樣的思路。
autofac文件
autofac使用方法總結:part iii
autofac使用方法總結:part ii
autofac使用方法總結:part i
依賴注入框架Autofac學習筆記
因為公司有用到這個框架,所以就網上找了些資料學習一下。現在通過乙個簡單的例項來運用一下。新建乙個控制台應用程式 iocdemo 然後建立乙個iperson介面 public inte ce iperson 再新增乙個person類,讓它繼續iperson介面 class person iperson...
依賴注入和容器
下面列子gundong方法和kaochuan方法緊密結合,偶合度高,不利於擴充套件和維護。程式設計需要降低偶合度,增加可擴充套件性。class luntai class baoma baoma new baoma baoma kaochuan 使用依賴注入優化後的寫法 class luntai cl...
thinkphp(trait 依賴注入 容器)
1 trait 優先順序 子類 trait 父類 3 容器與依賴注入原理 class demo1 temp setname hhh return temp getname 繫結乙個類到容器 進去是類,出來是物件 public function bindclass 繫結乙個閉包到容器 閉包現在請理解為...