1

这个应用程序存在,并且可能有一些不太理想的设计决策,我们不能只是改变......所以就这样吧。

在我们的 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 管理器的方法……一个用于应用程序的其余部分,另一个用于命令工厂。

想法?

4

0 回答 0