14

現在実行中のActionDescriptorを取得する最適な方法は何ですかControllerContext?Action____Contexts

これまでのところ、私が見つけた唯一の方法は次のとおりです。

new ReflectedControllerDescriptor(context.Controller.GetType())
    .FindAction(context, context.RouteData.GetRequiredString("action"));

これは最適な方法ですか?

クラスに名前が付けられているという事実ReflectedControllerDescriptorは、ページ要求ごとに実行されるため、この操作に大きなコストがかかるのではないかと思います。ReflectedControllerDescriptorsそれに関連して、このクラスは内部的にキャッシュされますか、それとも実際に明示的にキャッシュする必要がありますか?

4

1 に答える 1

9

すでに行っていることを行うために必要なすべてのメソッドをコピーすることなく、MVC ソースを掘り下げるのが最も最適な方法です。ただし、見つかったアクションをキャッシュして、後続の呼び出しのパフォーマンスを向上させることができなかった理由がわかりません。

内部的ReflectedControllerDescriptorにも結果をキャッシュしますが、毎回すべての属性をチェックするため、少しオーバーヘッドがあるようです。のようなものHttpPostAttributeとそうでないもののためのようです。

私の提案は、自分でキャッシュするのではなく、使用しているものに固執することです。何らかの理由で、基になるメソッドの動作方法が変更された場合でも、既に最新の状態になっているため、キャッシュされたアイテムの保存方法を変更することを心配する必要はありません。

于 2012-06-01T17:51:31.647 に答える