我正在使用依賴注入。說我有一個OrderService類是這樣的:在依賴注入中聲明門面類
public class OrderService{
public OrderService(
IOrderValidator validator
, IOrderRepository repository
, IOrderNotificator notificator){
//assign global fields
}
public void SubmitOrder(Order ord){
if(validator.IsOrderValid(ord)){
repository.InsertNew(ord);
notificator.Notify(ord);
}
}
}
現在我不知道創建例如TypeAOrderService
一個門面類,如OrderService繼承,與如在構造函數中聲明組件:
public class TypeAOrderService : OrderService{
public TypeAOrderService() : base(
new OrderValidator(),
new OrderRepository(),
new OrderNotificator()) { }
}
(請注意,注入組件的複雜性的實現在這裏並不重要,但adapter pattern
也可以被替換爲繼承)。
這裏可能會有缺點,因爲我們沒有在組合根目錄中定義依賴關係。不過,我想知道在某些情況下是否可以接受。尤其是在framework component
的時候,通過訪問DI容器並自己解決它,使用框架相當奇怪。
更新:
正如評論所說,目前我不使用任何IOC容器。我的觀點是,在Framework中使用IOC容器很奇怪,因爲這意味着每個應用程序使用框架都需要使用IOC容器。如果我的觀點不對,請隨時糾正我。
我所指的框架示例是System.Windows.Forms.Form
,其中我沒有使用任何IOC容器並且不確定依賴關係。
你好Fendy,你想只使用依賴注入,或者你也嘗試使用IOC容器。恕我直言,你正在採取的方法將工作,但是如果你使用IOC容器(如windsor),我認爲你最好爲你的組件創建一個安裝程序。也許這篇文章可以幫助你http://kozmic.net/2010/08/10/ioc-patterns-ndash-partitioning-registration/ – Marwijn
@Marwijn目前我不使用任何IOC容器。我的觀點是,在Framework中使用IOC容器是很奇怪的,因爲這意味着每個應用程序使用該框架都需要使用IOC容器(同時請說明我的觀點是否錯誤)。我正在引用框架示例,如'System.Windows.Forms.Form' – Fendy
如果你不想使用IOC容器,並且你似乎有一個合法的理由,我認爲你的方法是好的。在這種情況下,OrderValidator,OrderRepository和OrderNotificator甚至可能是您的Assembly的私有類。 – Marwijn