我目前停留在試圖編寫不依賴服務位置的工廠類。沒有服務定位器的工廠模式
我能想到的唯一的另一種選擇是使用構造函數注入來注入所有可能的實例,但這可能會導致意外,因爲類是通過引用傳遞的。 一旦可能的供應商數量增長,它也可能會變得昂貴和混亂。
提供者本身是完全複雜的類,它們有自己的依賴關係,因此手工構建不在圖片中。
更新服務位置例如:
public class ProviderFactory : IProviderFactory
{
private readonly IProviderConfigurationService _providerConfigurationService;
public enum SearchType
{
Foo,
Bar
}
public ProviderFactory(IProviderConfigurationService providerConfigurationService)
{
_providerConfigurationService = providerConfigurationService;
}
public Collection<IProvider> GetProviderInstances(SearchType searchType)
{
// Provider configuration service will read a XML/DB store to retrieve list of search providers applicable for a search type
var providerList = _providerConfigurationService.GetProviderList(searchType);
return new Collection<IProvider>(providerList.ForEach(x=> ServiceLocator.GetInstance(typeof(x))).ToList()) ;
}
}
我有什麼其他選擇?我目前正在使用Unity for DI。
爲什麼你首先需要這麼多的依賴對象? – Muctadir
根據搜索類型的不同,我需要調用一組不同的提供者。這也是一般工廠模式的一個有效問題,因爲它的工作是創建違背IoC原則的具體實例。 –
您使用的是什麼DI框架? Ninject有一個非常棒的工廠擴展。 –