每个应用程序的Unity和多个EF上下文

时间:2013-02-23 15:52:31

标签: asp.net-mvc entity-framework unity-container

我们目前使用Unity作为我们的Windows服务和MVC应用程序,它运行正常。 我们为每个Web请求创建一个ChildContainer,并将DbContext注入定义为hierarquical,因此每个Web请求都有自己的上下文实例。 我们还有一个BaseDbContext类,可确保EF设置在所有上下文中保持一致。

到目前为止一切顺利。 现在的问题是添加了第二个数据库,因此,第二个上下文也继承自BaseDbContext。

我们无法将Unity配置为注入不同的上下文,因为基类是相同的。

我们找到的解决方案是创建一个 ContextProvider,其中T:BaseDbContext 并在Unity中注册,因此我们可以按类型区分上下文。

然而,这似乎不对,因为Unity应该能够处理这种情况。

处理此问题的建议方法是什么?

感谢。

1 个答案:

答案 0 :(得分:0)

您可以使用命名注册进行两次相同类型的注册:

Container
  .RegisterType<BaseDbContext>("context1", ...)
  .RegisterType<BaseDbContext>("context2", ...)

并且,在客户端代码中:

public void MyClass {

   public MyClass([Dependency("context1")] BaseDbContext context1, 
                  [Dependency("context2")] BaseDbContext context2) {
         ....
   }
}