Dependency injection 如何实例化unitofwork
我正在使用依赖注入模式来解析UnitOfWork的正确实例。 当我只使用一个类型映射时,一切正常Dependency injection 如何实例化unitofwork,dependency-injection,unity-container,enterprise-library,Dependency Injection,Unity Container,Enterprise Library,我正在使用依赖注入模式来解析UnitOfWork的正确实例。 当我只使用一个类型映射时,一切正常 unityContainer.RegisterType<IUnitOfWork, UnitOfWork>(); unityContainer.RegisterType(); 当我对同一接口使用两个类型映射时,会出现问题: unityContainer.RegisterType<IUnitOfWork, UnitOfWork1>(); unityContainer.Re
unityContainer.RegisterType<IUnitOfWork, UnitOfWork>();
unityContainer.RegisterType();
当我对同一接口使用两个类型映射时,会出现问题:
unityContainer.RegisterType<IUnitOfWork, UnitOfWork1>();
unityContainer.RegisterType<IUnitOfWork, UnitOfWork2>();
unityContainer.RegisterType();
unityContainer.RegisterType();
我有一个非常常见的代码,比如
var unitOfWork = ServiceLocator.GetInstance<IUnitOfWork>();
var unitOfWork=ServiceLocator.GetInstance();
在某些情况下,它应该返回UnitOfWork,在某些情况下,它应该返回UnitOfWork2
我如何在不重构公共部分的情况下解决这个问题
还有,是的-我知道命名容器)您可以使用命名实例而不是命名容器。您可以使用Unity注册命名实例,如下所示:
unityContainer.RegisterType<IUnitOfWork, UnitOfWork1>("MyUnit1");
unityContainer.RegisterType<IUnitOfWork, UnitOfWork2>("MyUnit2");
unityContainer.RegisterType(“MyUnit1”);
unityContainer.RegisterType(“MyUnit2”);
然后,要解析正确的实例,可以使用以下语法:
var unitOfWork = ServiceLocator.GetInstance<IUnitOfWork>("MyUnit2");
var unitOfWork=ServiceLocator.GetInstance(“MyUnit2”);
另一个选项是用一些接口(例如IUnitOfWork2)装饰另一个UnitOfWork类。然后将UnitOfWork2注册到IUnitOfWork2,并在需要时通过该新接口解析实例
尽管您提到不想重构ServiceLocator.GetInstance-method。我仍然认为最简单的方法是向GetInstance方法添加一个可选参数,并使用命名实例。如果这是不可能的,那么您可以将工厂类注册到IUnitOfWork,并使用它来获得正确的UnitOfWork实现。下面是一个关于如何向Unity注册工厂的示例。请注意,最新版本的Unity可能有不同的实现方式。另外,还有处理Unity容器和工厂的堆栈溢出。谢谢您的建议。但问题似乎更为复杂。你能进一步说明你的问题吗?也许我们可以找到另一个解决办法。