我目前正试图编写一个不依赖服务位置的工厂类。
我能想到的唯一另一种选择是使用构造函数注入来注入所有可能的实例,但这可能会导致意外,因为类是通过引用传递的。一旦可能的供应商数量增加,它也可能会变得昂贵和混乱。
提供者本身是完全复杂的类,它们有自己的依赖关系,因此手动构建是不可能的。
更新的服务位置示例:
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 进行 DI。