Web API + Unity - 引用对象 dbcontext 已经实例化
Web API + Unity - Reference object dbcontext already instantiated
我正在使用 Unity 进行依赖注入。
我有一个方法负责实例化数据库对象,如下所示:
container.RegisterType<DB>(
new InjectionFactory(c =>
{
return new DB();
})
);
问题是,我有一个方法使用两个不同的对象,这些对象应该被引用到同一个数据库实例,但看起来 Unity 在每次注入中都创建了一个新的数据库对象实例。
查询 LINQ 示例:
var test = from tb1 in _db1.method()
join tb2 in _db2.method() on tb1.code equals tb2.code
_db1 和 _db2 引用相同的数据库对象,如下所示
DB _db = null;
public db1(DB dataContext)
{
_db = dataContext;
_db.CommandTimeout = 3600;
}
所以我收到以下错误:
The query contains references to items defined on a different data context
有人可以帮我修复 Unity 寄存器以引用已经实例化的 DB 对象,而不是每次都创建一个新对象吗?
您应该将您的数据库注册为容器中的单例,这意味着每次请求数据库时都会返回相同的实例,这:
container.RegisterType<DB>(new ContainerControlledLifetimeManager())
应该这样做,如果这是一个 Web 应用程序,您可能应该为每个请求创建一个子容器,有不同的方法可以做到这一点,但您可能想 https://www.nuget.org/packages/Unity.Mvc4/ 尝试一下
我正在使用 Unity 进行依赖注入。
我有一个方法负责实例化数据库对象,如下所示:
container.RegisterType<DB>(
new InjectionFactory(c =>
{
return new DB();
})
);
问题是,我有一个方法使用两个不同的对象,这些对象应该被引用到同一个数据库实例,但看起来 Unity 在每次注入中都创建了一个新的数据库对象实例。
查询 LINQ 示例:
var test = from tb1 in _db1.method()
join tb2 in _db2.method() on tb1.code equals tb2.code
_db1 和 _db2 引用相同的数据库对象,如下所示
DB _db = null;
public db1(DB dataContext)
{
_db = dataContext;
_db.CommandTimeout = 3600;
}
所以我收到以下错误:
The query contains references to items defined on a different data context
有人可以帮我修复 Unity 寄存器以引用已经实例化的 DB 对象,而不是每次都创建一个新对象吗?
您应该将您的数据库注册为容器中的单例,这意味着每次请求数据库时都会返回相同的实例,这:
container.RegisterType<DB>(new ContainerControlledLifetimeManager())
应该这样做,如果这是一个 Web 应用程序,您可能应该为每个请求创建一个子容器,有不同的方法可以做到这一点,但您可能想 https://www.nuget.org/packages/Unity.Mvc4/ 尝试一下