寿命は、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秒あたりの千分)。
このパターンは、おそらく最近非常に安定した、非常に柔軟性の高いサイトを作ります。新しいバージョンのサービスは、まったく同じパターンを使用して展開され、サイトを非常に安定に保ちます。
'私はUnity for DIでASP.NET MVCアプリケーションを作成しています.' - Unityプロジェクトがデッドであることに注意してください。新しいアプリケーションの場合、まだアクティブな[他の多くのコンテナ](https://github.com/danielpalme/IOCPerformance)のいずれかを使用するのが最善です。 – NightOwl888
本当ですか? .netアプリケーションに最適なのは何ですか?私は横断的関心事も実装する必要があります。オートファック? –