私は現在、サービスの場所に依存しないファクトリ クラスを作成しようとしています。
私が考えることができる他の唯一の代替手段は、コンストラクター注入を使用してすべての可能なインスタンスを注入することですが、クラスが参照を介して渡されるため、驚きにつながる可能性があります。また、可能なプロバイダーの数が増えると、費用がかかり、面倒になる可能性があります.
プロバイダー自体は、独自の依存関係を持つ完全に複雑なクラスであるため、手動で構築する必要はありません。
更新されたサービスの場所の例:
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()) ;
}
}
他のオプションは何ですか? 現在、DIにUnityを使用しています。