我们目前使用Unity作为我们的Windows服务和MVC应用程序,它运行正常。 我们为每个Web请求创建一个ChildContainer,并将DbContext注入定义为hierarquical,因此每个Web请求都有自己的上下文实例。 我们还有一个BaseDbContext类,可确保EF设置在所有上下文中保持一致。
到目前为止一切顺利。 现在的问题是添加了第二个数据库,因此,第二个上下文也继承自BaseDbContext。
我们无法将Unity配置为注入不同的上下文,因为基类是相同的。
我们找到的解决方案是创建一个 ContextProvider,其中T:BaseDbContext 并在Unity中注册,因此我们可以按类型区分上下文。
然而,这似乎不对,因为Unity应该能够处理这种情况。
处理此问题的建议方法是什么?
感谢。
答案 0 :(得分:0)
您可以使用命名注册进行两次相同类型的注册:
Container
.RegisterType<BaseDbContext>("context1", ...)
.RegisterType<BaseDbContext>("context2", ...)
并且,在客户端代码中:
public void MyClass {
public MyClass([Dependency("context1")] BaseDbContext context1,
[Dependency("context2")] BaseDbContext context2) {
....
}
}