以前は、Unity Containerを使用してAsp.Net MVCとの依存関係を解決しました。今度はUnityの代わりにAsp.Net Core DIを使用する予定です。これは現時点ではCoreと統合するための実行可能な方法を持っていませんが、どちらが同じクラスを注入する最良の方法かを理解しようとしていますが、異なるライフサイクル。Asp.Net Core DIに異なるライフサイクルの同じクラスを挿入するにはどうすればよいですか?
なぜですか?単一のEntity Frameworkコンテキストで動作する複数のスレッドがスレッドセーフではなかったため、別のスレッドで別のクエリを実行するために、各スレッドインスタンスに対して別々のDbContextのインスタンスが必要になるため、 Unityでの私の戦略は、2つのUnityContainerを作成していました.1つはすべてのシングルトンクラスを持ち、もう1つはリクエストごとにインスタンスを作成していました。だから私は別のスレッドで2番目のクエリを作成したときに、私は単体のインスタンスを要求ごとに作成して解決します。
Asp.Netコアと私が知っていると思います。私の問題を解決する最良の方法がある
の1-?
2 - 私は多分、「コンテナ」
3-もしIドンの両方にCompositionRootパターンを適用する?私は二度同じAsp.NetコアDIを持つことができる方法を知っていただきたいと思い、同じ戦略を選択した場合自分の戦略を選んではいけません。同じコンテナ内で同じライフサイクルの同じクラスのインスタンスを解決するために使用できるパターンと、それを個別に解決する方法はどちらですか?
私はそれを調べる必要がありますが、名前のついたインスタンスは機能するでしょうか?あなたが使用しているDIに依存しますが、それはボックスからサポートされているかどうかわかりません。シンプルなインジェクターでは、これがあります:http://simpleinjector.readthedocs.io/en/latest/howto.html#resolve-instances-by-key –
@AshleyMedwayはい、その機能は使用しているDIに依存しますが、リンクとして私は、GetByKeyが私のアーキテクチャでServiceLocatorを導入しないようにしたいと考えています。 – Zinov
"現時点ではコアと統合可能な方法はありません"。 [このサンプルプロジェクト](https://github.com/dotnetjunkie/Missing-Core-DI-Extensions/blob/master/src/SampleApplication.Unity/Startup.cs)には、UnityをASP.NETコアと統合する方法が示されています。ここでの誤解は、アダプタが必要だと思っているが、そうしないということです。 – Steven