このアプリケーションは存在し、変更できないほど理想的とは言えない設計上の決定が含まれている可能性があります。
Unity イニシャライザーでは、以下が登録されています。
container.RegisterType<DbContext, MyContext>(new HierarchicalLifetimeManager());
これは、アプリ全体がコンテキストを取得する方法です。ただし、1 つの部分のために作成されたマルチスレッド コードの場合、これで問題が発生します。これに変更すると修正されますが、アプリの残りの部分が信頼できなくなります。
container.RegisterType<DbContext, MyContext>(new PerThreadLifetimeManager());
マルチスレッド コードはコマンドを使用して実行され、子コンテナーを作成する CommandFactory で作成されます。
_container = container.CreateChildContainer();
次に、この関数はコマンドを解決し、新しいスレッドで開始されるため、新しいコンテキストを挿入します。
public T CreateCommand<T>() where T : IProcessCommandBase
{
return _container.Resolve<T>();
}
両方のライフタイム マネージャーを使用する方法を探しています。1 つはアプリの残りの部分用、もう 1 つはコマンド ファクトリ用です。
アイデア?