【发布时间】:2019-04-24 03:03:48
【问题描述】:
我们正在构建一个应用程序,我们必须同时拥有新旧版本才能同时工作(V1 是旧版本,V2 是新版本)。现在为了处理新流,我们使用相同的旧接口,一切都相同,只是功能不同,因此现在我们必须定义一个命名实例,以便为新流解析实例。
在这个过程中,团队已经开始使用如下所示的服务工厂模式
class DataProcessor
{
private readonly IDataManager _dataManager;
public DataProcessor(IServiceFactory serviceFactory)
{
_dataManager = serviceFactory.GetInstance<IDataManager>();
}
public void Execute()
{
_dataManager.Run();
}
}
服务工厂类
public class ServiceFactory : IServiceFactory
{
private readonly IFeatureEvaluator _featureEvaluator;
public ServiceFactory(IFeatureEvaluator featureEvaluator)
{
_featureEvaluator = featureEvaluator;
}
public T GetInstance<T>()
{
if (_featureEvaluator.IsEnabled<"V2">())
{
return ObjectFactory.GetInstance<T>("V2")
}
return ObjectFactory.GetInstance<T>();
}
}
由于服务工厂是反模式的,而且它在将来淘汰旧流程时会产生很多复杂性,我想要一种方法来初始化容器(结构映射 ioc)本身的依赖关系或在“纯 DI “这样我们就可以避免头痛。关于如何解决这个问题的任何想法。
更新: IDataManager 实现
public interface IDataManager
{
void Run();
}
public class OldFlow : IDataManager
{
public void Run()
{
//
}
}
public class NewFlow : IDataManager
{
public void Run()
{
//
}
}
IDataManager 有 2 个实现,解析实例应该基于 _featureEvaluator,如果是 V2 流,则应该实例化“新流”,否则实例化“旧流”实例
【问题讨论】:
标签: c# dependency-injection service-factory