0

以前は、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を持つことができる方法を知っていただきたいと思い、同じ戦略を選択した場合自分の戦略を選んではいけません。同じコンテナ内で同じライフサイクルの同じクラスのインスタンスを解決するために使用できるパターンと、それを個別に解決する方法はどちらですか?

+1

私はそれを調べる必要がありますが、名前のついたインスタンスは機能するでしょうか?あなたが使用しているDIに依存しますが、それはボックスからサポートされているかどうかわかりません。シンプルなインジェクターでは、これがあります:http://simpleinjector.readthedocs.io/en/latest/howto.html#resolve-instances-by-key –

+0

@AshleyMedwayはい、その機能は使用しているDIに依存しますが、リンクとして私は、GetByKeyが私のアーキテクチャでServiceLocatorを導入しないようにしたいと考えています。 – Zinov

+1

"現時点ではコアと統合可能な方法はありません"。 [このサンプルプロジェクト](https://github.com/dotnetjunkie/Missing-Core-DI-Extensions/blob/master/src/SampleApplication.Unity/Startup.cs)には、UnityをASP.NETコアと統合する方法が示されています。ここでの誤解は、アダプタが必要だと思っているが、そうしないということです。 – Steven

答えて

1

あなたが求めているのは、本当に不要です。あなたは、デフォルトでは、ASP .NET CoreアプリケーションのStartUpクラスのConfigureServicesservices.AddDbContext<MyDbContext>拡張メソッドを使用して)メソッドでDbContextを追加すると

寿命をスコープと同様に登録されますされています。スコープされた有効期間は、あなたが言及しているスレッドの安全性の問題を回避するために必要です。

もちろん、追加のパラメータを渡すことでAddDbContextでこれを無効にすることができます。または、自分でコンテキストを登録することもできます。しかし、なぜあなたは(?)になりたいですか?

+0

このセクションの「スコープライフタイムの理解」を読んで、あなたの意見をお寄せくださいhttps://wildermuth.com/2016/08/07/ASP-NET-Core-Dependency-注入は、私が同じ問題に直面しているようにも見えます – Zinov

+0

彼が記述するシナリオは、 'StartUp'クラス内でコンテキストを使用したいという事実に直接関係しているようです。データベースのシーディングを行います。アプリケーションが非常に複雑でない限り、複数のコンテナを作成する手間を経なければならないとはまだ思っていません。 1つまたはそれ以上のスコープの存続期間は、問題なく、必要なものを実行する必要があります。それが私のEF関連プロジェクトで使用しているもので、うまくいきます。私が問題を抱えているのは、誤ってコンテキストを一時的なもの、またはシングルトン(DB I/Oを試みるときにあらゆる種類のエラー)として登録しようとする場合だけです。 –

関連する問題