2010-11-12 65 views
1

我们有一个使用Unity和IUnitOfWork的站点用于我们的EF上下文。到目前为止,我们只使用一个EF上下文,因此这是在Unity配置中映射的。这一切都是通过构造函数注入来处理的,这是我们希望保持一致性的。单个ASP.NET MVC项目中的多个IUnitOfWork实现

我们现在为我们的PaymentController引入了另一个EF上下文,该站点在站点内使用,但Unity配置当前仅允许我们为IUnitOfWork创建一种类型。

我知道我可以为具有不同名称属性的新上下文创建一个新的<register/>元素,但是如何在控制器构造函数中实现此操作以使用名为付款的元素?

<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; 
    } 
    } 

非常感谢

回答

0

FirstContextPaymentsContext每个具有唯一的一组实体(例如,每一个连接到不同的数据库),这是值得野在代码中明确定义此。这样做的一种方式是通过指定工厂的每个工作单元:

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配置,因为您不需要任何指定的注册。