这个应用程序存在,并且可能有一些不太理想的设计决策,我们不能只是改变......所以就这样吧。
在我们的 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 管理器的方法……一个用于应用程序的其余部分,另一个用于命令工厂。
想法?