この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 20252|答える: 1

[出典] オートファックコンポーネントのインスタンス範囲

[リンクをコピー]
掲載地 2018/09/14 13:22:21 | | | |
インスタンススコープは、リクエスト間でのサービスの共有方法を決定します。

元の住所:http://docs.autofac.org/en/latest/lifetime/instance-scope.html

依存関係ごとに1つのインスタンス

このオプションでは、サービスが要求されるたびに新しいインスタンスが返されます。 InstancePerDependency()を使ってください。 これがデフォルトの選択肢です。 以下のコード、2行目と3行目は同値です。

以下のコードは各ループごとに新しいインスタンスを生成し、合計100インスタンスとなります。

単一インスタンス

このオプションを使って、ルートスコープまたはネストスコープのいずれかでサービスを要求し、両方とも同じインスタンスを返します。 SingleInstance() を使って指定してください。


以下のコード、w1とw2は常に同じオブジェクトであり、ワーカークラスは100ループのうちに1つのインスタンスのみです。


ライフサイクルスコープごとに1つのインスタンス

このオプションを使って特定のILifetimeScopeでサービスを要求し、1つのインスタンスのみを返します。 InstancePerLifetimeScope()を使ってください。 次のコードでは、スコープ1の100回のw1は同じオブジェクトであり、スコープ2の100回のw2は同じオブジェクトですが、w1とw2は同じオブジェクトではありません。


マッチングライフサイクル範囲ごとに1つのインスタンス

上記の[ライフサイクルスコープごとに1インスタンス]に似ていますが、よりコントロールが強化されています。 このオプションを使って、ILifetimeScopeオブジェクトにタグを付与できるようにします。 タッグマッチの範囲内には1つのインスタンスしかありません。 InstancePerMatchingLifetimeScope()メソッドを使ってください。

以下のコードでは、w1とw2は同じで、w3とw4は同じですが、w1とw3は異なります。

解析時に適切なマークアップを提供しなければならず、以下のコードは例外を投げ出します。

リクエストごとに1つのインスタンス

一部のアプリケーションは、MVCやWebFormアプリケーションのように自然にRequestセマンティクス ASP.NET 持っています。 [1インスタンス1リクエスト]は[1インスタンスのマッチングライフサイクル範囲]を基に、スコープマーカー、登録関数、共通型統合を提供することで実装されています。 基本的には、[マッチングするライフサイクル範囲ごとに1つのインスタンス]です。

ASP.NET Coreは、リクエストごとに1つのインスタンスではなく、ライフサイクルスコープごとに1つのインスタンスを使用します。

所有されている1つあたり1つのインスタンス

所有されている<T>暗黙の関連付けタイプは、入れ子状のライフサイクル範囲を作成します。 インスタンスごとに所有された登録を使えば、依存関係を所有されたインスタンスに限定できます。

この場合、ServiceForHandlerサービスはMessageHandlerインスタンスの範囲内に限定されます。


ねじの幅

AutofacはスレッドAのオブジェクトがスレッドBの依存関係を満たさないように強制できます。

そしてそれぞれが自分の生涯範囲を作ればいいのです

重要:マルチスレッドのシナリオでは、親スコープをクリーンアップしないように注意してください。そうでなければ、派生スレッド内のサブスコープはサービスを解決できません。

各スレッドはMyThreadScopedComponentのインスタンスを持ち、これは基本的にライフサイクルスコープ付きのシングルトンです。 スコープ内のインスタンスは外部から提供されないため、スレッド間でコンポーネントを分離しやすくなります。

ILifetimeScopeパラメータを追加することで、親範囲をスレッドを生成するコードに注入でき、Autofacが自動的に現在の範囲を注入し、それを使ってネストされたスコープを作成できます。

さらに制御したい場合は、[1インスタンスごとに一致するライフサイクル範囲]を使って、スレッドスコープのコンポーネントを内部ライフサイクルスコープに関連付けることができます。図に示す通りです:



図の「コンテキスト」は、BeginLifetimeScopeメソッドによって作成されたライフサイクル範囲です。





先の:フロントエンドのマウスクリック効果:自由、民主主義、繁栄
次に:{&quot;error_msg&quot;: &quot;IAM認証に失敗&quot;}
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com