我正在使用Unity进行依赖注入。
我有一个负责实例化数据库对象的方法如下:
container.RegisterType<DB>(
new InjectionFactory(c =>
{
return new DB();
})
);
问题是,我有一个方法,它使用两个不同的对象,这些对象被引用来引用同一个数据库实例,但看起来就像Unity在每次注入时都在创建一个新的DB Object实例。
查询LINQ示例:
var test = from tb1 in _db1.method()
join tb2 in _db2.method() on tb1.code equals tb2.code
_db1和_db2引用相同的DB对象,如下所示
DB _db = null;
public db1(DB dataContext)
{
_db = dataContext;
_db.CommandTimeout = 3600;
}
所以我收到以下错误:
查询包含对在不同数据上下文中定义的项的引用
有人可以帮我修复Unity寄存器以引用已经实例化的DB对象,而不是每次都做一个新的吗?
答案 0 :(得分:1)
您应该将数据库注册为容器中的单例,这意味着每次请求数据库时都会返回相同的实例,这样:
container.RegisterType<DB>(new ContainerControlledLifetimeManager())
应该这样做,如果这是一个Web应用程序,您应该为每个请求创建一个子容器,有不同的方法来执行此操作,但您可能想尝试https://www.nuget.org/packages/Unity.Mvc4/