C# 抽象工厂与统一依赖注入
我非常不确定我应该如何处理这个问题,因为我是Unity容器的新手 我有一家工厂:C# 抽象工厂与统一依赖注入,c#,entity-framework,dependency-injection,unity-container,enterprise-library,C#,Entity Framework,Dependency Injection,Unity Container,Enterprise Library,我非常不确定我应该如何处理这个问题,因为我是Unity容器的新手 我有一家工厂: class DataCopierFactory : IDataCopierFactory { private readonly IUnityContainer _container; //not mad on binding the factory to the container, but feck it public DataCopierFactory(IUnityContainer
class DataCopierFactory : IDataCopierFactory
{
private readonly IUnityContainer _container;
//not mad on binding the factory to the container, but feck it
public DataCopierFactory(IUnityContainer container)
{
_container = container;
}
//return a data copier that will transfer data from any DB to any other DB
public IDataCopier createDataCopier(int i)
{
switch(i)
{
case 1:
return new ScheduleDataCopier(new LTEEFContext()); //somehow resolve the LTEEFContext..
//case 2:
//
default:
throw new InvalidOperationException("Parameter -t=" + i + " does not exist");
}
}
}
当我调用createDataCopier方法并传入一些枚举时,我想使用Unity容器来解析各种IDataCopier类型的DB对象上下文
我该怎么做
我应该在调用工厂的类中这样做吗?或者注入unitycontainer并在该点解析不同的DB对象上下文
IDatacopier的每个实现都有一个IDBContext作为构造函数,我想基本上注入它,但允许我为Datacopier的不同实现更改上下文
希望这是有意义的…:)
提前谢谢
尼尔找到了答案。。是我的错:) 我试图将objectContext作为依赖项注入,但我不应该这样做。我认为工厂不应该有你的IOC容器的实例 在使用存储库模式时,每个DataCopier impl不应该需要ObjContext的实例,因为它们都有各自需要的存储库的实例 这可能不是最好的方法,因为我将repo耦合到datacopier类,但我认为这没问题,因为repo和对象上下文之间已经存在抽象(我使用Unity将objectcontext作为依赖注入所有repo)
欢迎任何建议。我建议为您的IDataCopier进行多个Unity注册(针对每个实现)。通过获取IDataCopier[]的构造函数参数,可以将它们全部注入工厂。注意:使用Unity时,您必须在多次注册时为每个注册命名
然后你需要一种方法来选择你想要的。我建议在IDataCopier接口中添加一个get属性,该属性可以是int或string标记。然后,您的createDataCopier(int)可以查询从Unity获得的IDataCopier[],以获取get属性==int i的元素。这是“策略模式”,比静态开关语句更灵活。将IDataCopier[]存储到字典字段中是方便选择的一种简便方法,但一个简单的LINQ语句也会起作用。很高兴看到OP自己解决了这个问题。如果人们仍然感兴趣,我们有一个关于如何解决这些问题的广泛示例: