2

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

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

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

我们找到的解决方案是创建一个ContextProvider where T : BaseDbContext并将其注册到 Unity 中,这样我们就可以通过类型来区分上下文。

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

有什么建议的方法来处理这个问题?

谢谢。

4

1 回答 1

0

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

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

并且,在客户端代码中:

public void MyClass {

   public MyClass([Dependency("context1")] BaseDbContext context1, 
                  [Dependency("context2")] BaseDbContext context2) {
         ....
   }
}
于 2013-02-25T12:04:26.267 回答