2009-05-01 8 views
0

可能性の重複をコントローラタイプを取得する方法:
How can I get controller type and action info from a url or from route data?その名前で

私は、コントローラ名とそのアクション名のリストを持っています。私がする必要があるのは、それらのアクションのカスタム属性から値を読み取ることです。 ASP.NET MVCフレームワークはDefaultControllerFactoryでこの機能を持っていますが、フレームワーク自体の外部ではアクセスできません。 特に、MVCフレームワークにはコントローラタイプのキャッシュがあり、これを複製する必要があるため、ホイールを再構成して実装するのは良い考えではありません。 もっと良い解決策はありますか?


Upd。 Accessing the list of Controllers/Actions in an ASP.NET MVC applicationは、類似しているが異なる問題を説明している。どのコントローラー/アクションが実行可能かを判断する必要はありません。単一のコントローラーのタイプを取得する必要があります。

+0

以下をご覧ください:http://stackoverflow.com/questions/2690779/how-can-i-get-controller-type-and-action-info-from-a-url-or-from-ルートデータ – Luciano

答えて

0

私はあなたがこれを行う必要がある場所には本当に明確ではありません。あなたのMVCアプリ内でこれを実行する必要があるなら、あなたはあなた自身のコントローラファクトリを実装し、そこにあなたのコードを入れて、コントローラのタイプをキーキャッシュと結果保存でき - 例えば:

public class CustomControllerFactory : DefaultControllerFactory 
{ 
    protected override IController GetControllerInstance(Type controllerType) 
    { 
    // do something with controller attributes on controllerType here the 
    // first time a controller is seen and store the results in a 
    // static cache keyed on the controller type 

    return base.GetControllerInstance(controllerType); 
    } 
} 

をし、そのControllerFactoryを登録しますアプリケーションの起動(例えば中Global.asaxの)上: - 私は「、再び別

ControllerBuilder.Current.SetControllerFactory(new CustomControllerFactory()); 

、あなたは単に「コントローラ」で終わり、そこにあなたのコードを実行し、アセンブリ内のすべてのクラスを探すためにリフレクションを使用することができますあなたがこれが起こる必要がある場所が不明です。

0

リフレクションを使用してアセンブリをリッピングし、型を取得し、アクションを反復して、興味のある属性が存在するかどうかを確認しているので、おそらく最も直接的な方法でしょう。 MVCでコントローラキャッシュから型情報を抽出する方法があるかどうかを知るために、ASP.Net MVCで十分にクロールしていませんでした。

また、キャッシュにオブジェクト(そして、ASP.Net MVCコントローラ、より具体的にはあなたのコントローラは、構築するのに十分安く、構築されてキャッシュされていますが、私にとっては不明です)、システム内の各コントローラを取得し、それらのタイプを取得することができますより直接的。

関連する問題