Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 单个ASP.NET MVC项目中的多个IUnitOfWork实现_Asp.net Mvc_Dependency Injection_Unity Container - Fatal编程技术网

Asp.net mvc 单个ASP.NET MVC项目中的多个IUnitOfWork实现

Asp.net mvc 单个ASP.NET MVC项目中的多个IUnitOfWork实现,asp.net-mvc,dependency-injection,unity-container,Asp.net Mvc,Dependency Injection,Unity Container,我们有一个网站使用Unity和IUnitOfWork作为我们的EF上下文。到目前为止,我们只使用了一个EF上下文,所以这是在Unity配置中映射的上下文。这一切都是通过构造函数注入处理的,我们希望保持一致性 现在,我们为网站中使用的PaymentController引入了另一个EF上下文,但Unity config当前只允许我们为IUnitOfWork创建一种类型 我知道我可以为新上下文创建一个新的元素,该元素具有一个独特的name属性,但是我如何在controller构造函数中实现这一点,以使

我们有一个网站使用Unity和IUnitOfWork作为我们的EF上下文。到目前为止,我们只使用了一个EF上下文,所以这是在Unity配置中映射的上下文。这一切都是通过构造函数注入处理的,我们希望保持一致性

现在,我们为网站中使用的
PaymentController
引入了另一个EF上下文,但Unity config当前只允许我们为IUnitOfWork创建一种类型

我知道我可以为新上下文创建一个新的
元素,该元素具有一个独特的name属性,但是我如何在controller构造函数中实现这一点,以使用名为payments的元素呢

  <register type="IUnitOfWork" mapTo="FirstContext" />
  <register type="IUnitOfWork" mapTo="PaymentsContext" name="payments"/>

  public class PaymentController()
  {
    public PaymentController(IUnitOfWork unitOfWork) 
    {
        //How to I tell unity that this needs to be a payments
        _unitOfWork = unitOfWork;
    }
  }

公共类PaymentController()
{
公共付款控制员(IUnitOfWork unitOfWork)
{
//我如何告诉unity,这需要一个
_unitOfWork=unitOfWork;
}
}

非常感谢

FirstContext
PaymentsContext
都有一组唯一的实体(例如,每个都连接到不同的数据库)时,在代码中明确定义这一点是值得的。一种方法是为每个工作单元指定一个工厂:

public interface IFirstContextFactory
{
    IUnitOfWork CreateNew();
}

public interface IPaymentContextFactory
{
    IUnitOfWork CreateNew();
}

public class PaymentController()
{
   public PaymentController(PaymentContextFactory paymentContextFactory)
   {
      //How to I tell unity that this needs to be a payments
      this.paymentContextFactory = paymentContextFactory;
   }

   public void DoSomething()
   {
      using (var context = this.paymentContextFactory.CreateNew())
      {
         // Do something useful

          context.Commit();
      }
   }
}
这不仅使您的依赖关系非常清楚(因为您知道代码处理的是什么类型的上下文),而且还简化了DI配置,因为您不需要任何命名注册