アプリケーションのクラス内からAutofacコンテナを取得する推奨方法は何ですか? Autofacは、クラスのIContainerプロパティの解決を提供しますか、それを構築したら、コンテナをグローバルに保存する必要がありますか?
ほとんどの場合、IComponentContext
またはILifetimeScope
が必要です。これらはAutofacによって自動的に提供されるので、あなたがする必要があるのは、それらのうちの1つに(コンストラクター)依存関係を取ることであり、現在のインスタンスが注入されます。
両方のインターフェイスは標準のResolve()
操作を提供し、ILifetimeScope
はIComponentContext
を拡張して、ネストされた新しいライフタイムを開始するメソッドを追加します。
コンテナのサービスを使用して他のコンポーネントにアクセスするコンポーネントは、正しいインスタンスが返されるように、「グローバル」IContainer
ではなく、独自のスコープ内でアクセスする必要があります。例えば。 HTTPリクエスト内では、挿入されたIComponentContext
またはILifetimeScope
が現在のリクエストに対するものになります。
挿入されたコンテキストを必要とするほとんどの問題は、リレーションシップタイプを使用して(よりエレガントに)克服することもできます- http://autofac.readthedocs.org/en/latest/resolve/relationships.htmlを参照してください 。