目前我正在嘗試一點與依賴注入容器,這一次與Unity。依賴注入和其他構造參數 - 不好的做法?
考慮到如下界面:
public interface IPodcastCommService
{
void Download();
void Upload();
}
和下面的實現:
public class PodcastService
{
private IPodcastCommService commservice;
private String url;
public PodcastService(String url, IPodcastCommService commservice)
{
this.commservice = commservice;
this.url = url;
}
}
因爲構造的,我一直在尋找一個解決參數傳遞給它,發現它:
var p = container.Resolve<IPodcastCommService>(new ParameterOverride("url", myUrl));
到目前爲止好,但在同一時間我讀了這是多麼糟糕,以及如何這個班的設計不錯,是的,它看起來有點難看。但是,我怎樣才能以優雅的方式將參數傳遞給類?
我的第一個想法是做它作爲一個屬性,但然後我必須檢查每次我需要它已經給出的Url。
更新: 一個例子,在那裏我閱讀,這是不好的設計,是這樣的:
但也有可能是,你必須通過在解析操作的自定義構造函數的參數情況。有人可能會爭辯說,這種糟糕的體系結構尖叫,但有一些情況,如將DI容器帶入可能需要這些操作的遺留系統。
來源:http://mikaelkoskinen.net/unity-passing-constructor-parameters-to-resolve/
你不介意告訴我,你有紅色的,這是不好的設計?因爲我實際上認爲這種設計是最好的你會得到。 – Egi 2013-05-06 09:47:17
@Egi:我更新了我的問題,以源。 – Kai 2013-05-06 11:29:34
您可以使用[ServiceLocator](https://commonservicelocator.codeplex.com/)來執行DI,而無需在構造函數中列出注入屬性。 – orad 2015-10-22 19:04:52