我正在開發使用DI和IoC的可擴展框架。用戶必須能夠通過將自己的實現放入容器來覆蓋框架內的現有功能。如何避免與IoC容器耦合
我該如何讓用戶做到這一點而不要求他們知道我正在使用哪個IoC容器?
我的當前中途的解決方案是構建我的組件如下:
1)定義只包含接口抽象組件。
2)定義實現這些接口的混凝土組件。用戶可以自行定義以覆蓋現有的功能。
3)在獨立的程序集中定義容器綁定;即每個混凝土組件的一個裝訂組件。
這意味着混凝土組件不與特定的IoC容器耦合,並且如果我使用了不同的容器,它們將被禁止更改。但是,用戶仍然需要知道我的框架使用哪個容器來編寫綁定程序集,如果我更改了IoC容器(即從Ninject到Spring),他們需要釋放新的綁定程序集。
我錯過了什麼嗎?
這種方法的問題在於,您受限於容器可以支持的最低公分母,在很多情況下,這不會滿足您的內部需求。我已經嘗試了這種確切的方法,並且對於剛剛接觸該項目的用戶而言造成了太多困惑。 – 2011-04-26 13:59:13
你用什麼來代替? – 2011-04-26 14:38:32
該框架提供了一套明確的註冊點,並在沒有容器的情況下管理內部依賴關係。註冊點包括工廠方法(通常以Func爲基礎)。然後,容器擴展(在單獨的程序集中)可以註冊併爲容器提供工廠方法。還可以使用註冊的中間模型將元數據從容器傳輸到框架。 –
2011-04-26 17:44:11