Asp.net mvc 单个ASP.NET MVC项目中的多个IUnitOfWork实现
我们有一个网站使用Unity和IUnitOfWork作为我们的EF上下文。到目前为止,我们只使用了一个EF上下文,所以这是在Unity配置中映射的上下文。这一切都是通过构造函数注入处理的,我们希望保持一致性 现在,我们为网站中使用的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构造函数中实现这一点,以使
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配置,因为您不需要任何命名注册