0

私は簡単な質問があります。私はMiscrosoftのUnityContainerの方が新しい。私はDIのためのUnityとASP.NET MVCアプリケーションを書いています。 Webアプリケーションに接続されている各ユーザーに別のCONTAINERがありますか?または、CONTAINERはすべてのユーザーで同じですか? したがって、ContainerControlledLifetimeManagerを使用してオブジェクトの存続時間を解決すると、このオブジェクトが常に同じであるという1つのユーザーセッションに対してのみ意味がありますか?ASP.NET MVCのUnityコンテナ

ご理解いただきますようお願い申し上げます。

おかげで、 クリスチャン

+0

'私はUnity for DIでASP.NET MVCアプリケーションを作成しています.' - Unityプロジェクトがデッドであることに注意してください。新しいアプリケーションの場合、まだアクティブな[他の多くのコンテナ](https://github.com/danielpalme/IOCPerformance)のいずれかを使用するのが最善です。 – NightOwl888

+0

本当ですか? .netアプリケーションに最適なのは何ですか?私は横断的関心事も実装する必要があります。オートファック? –

答えて

1

寿命は、DIプロセスによって作成されたオブジェクトの生活を指します。要求ごとに、各要求は独自のオブジェクトを取得します。オブジェクトが現在のユーザーに依存している場合は、その要求のクエリ文字列値、またはRequestヘッダーの値/存在がPerRequestの有効期間であることが適切です。たとえば、サービスの場所に応じて設定が異なる場合、たとえばweb.configから値を保存した場合、コンテナはglobal.asaで作成される可能性が高く、コンテナの存続期間中はこれらのオブジェクトを存続させることができます。

具体的な例:

あなたはあなたのサイトの一部としてサービスを持っていて、そのサービスのvNextに移行しています。ユーザーは、&myService=vNextのようなパラメータを含むリンクをクリックして、新しい動作を確認してオプトインすることができます。ファクトリメソッドはこのパラメータの値を使用して、各要求に対してvNowまたはvNextを選択します。

ここにいくつかの擬似コードあなたが始めるためにです:

container.RegisterInstance<IProductFactory>("enterprise", new EnterpriseProductFactory()); 
container.RegisterInstance<IProductFactory>("retail", new RetailProductFactory()); 
container.RegisterVersionedServiceFactory<IProductFactorySettings, IProductFactory>(); 

は、この例ではRegisterVersionedServiceFactoryは何もしませんが、IProductFactoryインスタンスのどれが現在の要求のために使用することを決定した拡張メソッドです。ファクトリは、このリクエストに使用する現在のインスタンス(サービスの存続期間は2つだけです)を提供します(1秒あたりの千分)。

このパターンは、おそらく最近非常に安定した、非常に柔軟性の高いサイトを作ります。新しいバージョンのサービスは、まったく同じパターンを使用して展開され、サイトを非常に安定に保ちます。

+0

私はContainerControlledLifetimeManagerで解決すれば、データベースへの接続のオブジェクトは私のwepアプリケーションに接続されているすべてのクライアントでこのオブジェクトですか? –

+0

答えはそれに依存します。私は一般的にあなたのデータベースがよりよく実行するように接続を共有することが望ましいと思います。全く異なる会話。私は見たよりも深くコードを掘り下げなければなりませんでしたが、私のアドバイスはさまざまな登録タイプを試してみることです。使用カウントを持つオブジェクトを作成し、それを複数の方法で登録し、それぞれの使用カウントを返すように依頼します。それが常に1つの場合、要求ごとに1つを作成するファクトリがあります。それがそれぞれの参照で増加するならば、それはシングルトンです。あなたが増加している期間の後にuse count unexpectedが1に戻ると、バグが発生します。 –

関連する問題