どのように私は、要求ごとの寿命の範囲で動作しますか?
リクエスト/レスポンスセマンティックを持つアプリケーション(例えば、 ASP.NET MVC や ウェブAPI)、あなたが扱う各要求のために与えられた依存関係の1つのインスタンスを取得します意味する「インスタンスあたりの要求」であることを依存関係を登録することができますアプリケーションとそのインスタンスによって、個々の要求のライフサイクルに縛られます。
要求ごとの寿命を理解するために、あなたはよく理解していなければならない 、一般的にどのように依存関係の寿命スコープ仕事を。あなたはどのように依存関係の寿命スコープの仕事を理解すれば、要求ごとの寿命の範囲が簡単です。
ASP.NETコア上の注意事項
で述べたように ASP.NETコア統合ドキュメント、 ASP.NETコアは、特定の要求ごとのスコープを持っていません。 すべてが登録されている InstancePerLifetimeScope()
代わりに InstancePerRequest()
ASP.NETコアのため。
ごとの要求として依存関係を登録します
あなたが要求ごととして登録依存関係をしたい場合は、使用 InstancePerRequest()
登録の拡張子を:
VaRのビルダー= 新しいContainerBuilder(); builder.RegisterType <ConsoleLogger> () の.as <ILoggerです> () .InstancePerRequest(); VaRのコンテナ= builder.Build()。
あなたは、あなたのアプリケーションのためのすべてのインバウンド要求のためのコンポーネントの新しいインスタンスを取得します。要求レベルの寿命の範囲の作成の取り扱いとそのスコープのクリーンアップは、一般的に経由して扱われる Autofacアプリケーション統合ライブラリ 、アプリケーションのタイプに。
私たちは、詳しく見ていく必要があります
どうごとの要求生涯作品
要求ごとの寿命は使用可能 タグ付けされた寿命のスコープと「インスタンスごとにマッチング生涯スコープ」メカニズムを。
Autofacアプリケーション統合ライブラリは、 異なるアプリケーションの種類にフックと、インバウンド要求に応じて、彼らが要求寿命スコープとしてその識別それを「タグ」と、ネストされた寿命のスコープを作成します。
+ -------------------------- +
| Autofac コンテナ | | | | + ---------------------- + | | | タグ付き要求の適用範囲| | | + ---------------------- + | + -------------------------- +
あなたは、コンポーネントを登録すると InstancePerRequest()
、あなたがリクエストスコープとしてタグ付けされ、そこからコンポーネントを解決するために生涯の範囲を探すためにAutofacを言っています、。あなたが作業単位寿命は、単一の要求時にそのテイク場所をスコープがあればその方法は、要求ごとの依存性は、要求中に共有されます。
+ ------------------------------------------------- --- +
| Autofac コンテナ | | | | + ------------------------------------------------ + | | | タグ付き要求の適用範囲| | | | | | | | + -------------------- + + -------------------- + | | | | | 単位の作業範囲| | 単位の作業範囲| || | | + -------------------- + + -------------------- + | | | + ------------------------------------------------ + | + ------------------------------------------------- --- +
要求の範囲は一定の値でタグ付けされた Autofac.Core.Lifetime.MatchingScopeLifetimeTags.RequestLifetimeScopeTag
文字列に相当し、 AutofacWebRequest
。要求寿命スコープが見つからない場合は、取得します DependencyResolutionException
あなたの要求寿命スコープを伝えることが発見されていません。
で以下にこの例外のトラブルシューティングのヒントがあります トラブルごとの要求の依存関係の セクションは。