web-dev-qa-db-ja.com

IContainerを解決する

アプリケーションのクラス内からAutofacコンテナを取得する推奨方法は何ですか? Autofacは、クラスのIContainerプロパティの解決を提供しますか、それを構築したら、コンテナをグローバルに保存する必要がありますか?

62
stimms

ほとんどの場合、IComponentContextまたはILifetimeScopeが必要です。これらはAutofacによって自動的に提供されるので、あなたがする必要があるのは、それらのうちの1つに(コンストラクター)依存関係を取ることであり、現在のインスタンスが注入されます。

両方のインターフェイスは標準のResolve()操作を提供し、ILifetimeScopeIComponentContextを拡張して、ネストされた新しいライフタイムを開始するメソッドを追加します。

コンテナのサービスを使用して他のコンポーネントにアクセスするコンポーネントは、正しいインスタンスが返されるように、「グローバル」IContainerではなく、独自のスコープ内でアクセスする必要があります。例えば。 HTTPリクエスト内では、挿入されたIComponentContextまたはILifetimeScopeが現在のリクエストに対するものになります。

挿入されたコンテキストを必要とするほとんどの問題は、リレーションシップタイプを使用して(よりエレガントに)克服することもできます- http://autofac.readthedocs.org/en/latest/resolve/relationships.htmlを参照してください

100