这个应用程序存在,可能有一些不太理想的设计决策,我们不能改变......所以这里。
在我们的Unity初始化程序中,注册了以下内容
container.RegisterType<DbContext, MyContext>(new HierarchicalLifetimeManager());
这就是整个应用程序获取其上下文的方式。但是,对于为一个部分编写的多线程代码,这会打破它。将其更改为此可以修复它,但会导致应用程序的其余部分不可靠。
container.RegisterType<DbContext, MyContext>(new PerThreadLifetimeManager());
多线程代码使用命令运行,它们是使用CommandFactory创建的,它创建了一个子容器。
_container = container.CreateChildContainer();
然后这个函数解析命令,注入一个新的上下文,因为它是在一个新线程上启动的:
public T CreateCommand<T>() where T : IProcessCommandBase
{
return _container.Resolve<T>();
}
我正在寻找一种方法来使用Lifetime管理器......一个用于应用程序的其余部分,另一个用于命令工厂。
想法?