My.Ioc 是做者開發的一款開源 IoC/DI 框架,下載地址在此處。它具備下面一些特色:html
高效緩存
在實現手段上,My.Ioc 經過使用泛型、緩存、動態生成代碼、延遲註冊、儘可能使用抽象類而非接口等方式來提升框架的性能。若是您想進一步瞭解經過上面這些手段,咱們可以得到怎樣的性能,請看這篇文章。安全
便於擴展多線程
在設計時,可擴展性是做者始終關注的問題之一。My.Ioc 也確實提供了良好的可擴展性。您能夠經過如下方式實現擴展:app
1. 自定義 Lifetime 實現。框架
2. 註冊自定義 ObjectBuilderRequested 事件 Handler 以實現延遲註冊(參見這篇文章)。函數
3. 經過添加自定義 IConstructorInjectionConfigurationItem/IMemberInjectionConfigurationItem 以及修改現有 IInjectionConfigurationInterpreter 的方式增長或修改對象建立邏輯(參見這篇文章)。例如,要想給某個現有註冊項增長 Decorator,能夠經過增長一個 IConstructorInjectionConfigurationItem 的方式來實現。性能
配置簡單ui
使用代碼方式進行註冊,而沒必要編寫一大堆配置文件那麼繁瑣。固然,配置方式是能夠擴展的,並且也很容易擴展。若是您喜歡,您也能夠自行實現一個經過配置文件進行註冊的機制。spa
功能全面
面向服務考慮
在面向服務環境中,服務常常處於變化之中。一個服務可能在這一時刻可用,但下一時刻已不可用。爲此,框架提供了註銷 (Unregister) 功能和觀察者 (IObjectObserver/IObjectCollectionObserver) 機制來適應這種變化。使用者能夠在運行過程當中隨時註銷某個服務實現(前提是該實現由該使用者註冊,並且該使用者在註冊服務時保留了該服務的 IObjectRegistration 對象)或註冊新的服務實現以替代已被註銷/過時 (Obsolete) 的服務實現,而其餘依賴於該服務的上層服務將會隨着該服務的註銷/註冊而自動停用/激活,相關的觀察者則會向自身的 Changed 事件訂閱者發送服務激活 (Activated)/停用 (Deactivated) 的通知。
富於交互性
框架提供了 ObjectBuilderRegistered/ObjectBuilderUnregistering/ObjectBuilderRequested 事件、IObjectObserver/IObjectCollectionObserver 的通知事件、ILifetimeScope 的 LifetimeScopeEnded 事件(可用於在資源釋放後執行自定義操做)、IObjectRegistration 的 Changed 事件等各種事件,使用者能夠根據須要訂閱它們,以實現與框架的交互。
安全性
安全性是做者在設計時的重要考量之一。框架具有線程安全性,可用於多線程環境中。此外,框架經過 ILifetimeScope 來管理資源的釋放 (Dispose)。使用者在解析(獲取)對象/服務時,必須指定相應的 ILifetimeScope,並在使用完成後正確釋放 ILifetimeScope,從而確保資源安全性。最後,框架遵循最小可訪問性原則(儘可能使用 private、protected、internal,少用 public),以保證良好的封裝和可見性控制,從而防止 Api 濫用或誤用。
零侵入性
同安全性同樣,侵入性也是做者在設計時的考量之一。所以,咱們摒棄了其餘一些 Ioc 框架(例如 NInject/Unity)所採用的經過 Attribute 標註實現某些功能的方式(例如標註某個要注入的構造函數/屬性/方法等),轉而要求使用者在註冊時提供具體信息(例如在配置方法注入時,只需提供方法名稱便可。但若是該方法含有多個重載,則需提供具體的 MethodInfo),以保證框架的零侵入性。