3

ActionFilterAttribute標準化された方法でログを記録するために、から継承する属性を使用する予定の Web API プロジェクトがあります。そのロギングの一環としてHttpActionContextOnActionExecutingメソッドからいくつかの値を抽出したいと考えています。次に、これらを の一部として参照したいと思いOnActionExecutedます。指定しました[AttributeUsage(AttributeTargets.Class)]この属性のために。私の仮定は、私のカスタム属性は、それが適用されるクラスと一致してインスタンス化され、属性が適用されるクラスと同じ寿命を持つということです。これを具体的に裏付けるものは見つかりません。私はいくつかのテストを行いましたが、それがどのように機能するかのようですが、私のテストが限定的すぎるのではないかと心配しています. 同じコントローラーを複数回呼び出すと、そのコントローラーの新しいインスタンスが生成され、したがって属性の新しいインスタンスが生成されると想定しています。の一部として取得するデータのスレッド セーフが基本的に心配ですOnActionExcecuting

私の仮定を確認または否定できるリソースまたはリンクを知っている人はいますか?

4

1 に答える 1

4

何を使用するかによって異なります。

Web API の属性 (フィルター) はキャッシュされます (フィルター パイプラインはprivate readonly Lazy<Collection<FilterInfo>> _filterPipeline;一度だけ初期化されます)。ここを参照

したがって、属性のコンストラクターで何かを初期化すると、その後の実行でも同じままになります。

ただし、HttpActionContextはリクエストごとに作成されHttpControllerContextHttpActionDescriptorパイプライン内のキャッシュされた各フィルターに渡されます。ここを参照

その結果、フィルタのインスタンスが再利用されても、メソッド内のコンテキストの値は特定のリクエストに固有のものになります。

于 2013-09-27T07:23:01.567 に答える