2010-09-14 43 views
2

當我的應用程序初始化時,我想創建一個任何MVC操作的註冊表,該操作的方法具有一定的CustomAttribute。我希望這個註冊表跟蹤MVC區域,控制器和操作。我可能要求添加屬性的人指定此信息,但它似乎應該能夠根據MethodInfo找出此信息:基本上與ActionLink方法調用時發生的情況相反。我怎樣才能做到這一點?如何從操作的MethodInfo獲取MVC操作信息?

回答

4

在整個裝配體中搜索每個Controller,然後搜索所有方法以找到具有特定屬性的方法。

// current assembly -> all types that have basetype controller -> grab methods 
foreach(var type in System.Reflection.Assembly.GetCallingAssembly().GetTypes().Where(t=> 
    typeof(Controller).IsAssignableFrom(t)))) 
{ 
    foreach(var methodInfo in type.GetMethods()) 
    { 
     if (methodInfo.GetCustomAttributes(typeof(MyAttribute), false).Count() > 0) 
     { 
      var action = methodInfo.Name; 
      var controller = type.Name; 
     } 
    } 
} 
+0

這是我在這裏要問的「//做點什麼」。假設您有MethodInfo:現在您如何獲得MVC區域,控制器和操作名稱? – StriplingWarrior 2010-09-14 16:25:27

+3

更改了我的示例。雖然不知道這個區域:一個區域與控制器的動作沒有緊密聯繫,或者是什麼?如果有一個區域包含控制器名稱和變量中的操作,我想你想查看'RouteCollection'。 – 2010-09-14 16:36:31

+1

我建議使用區域問題的命名空間,因爲它很可能是那些區域控制器共享一個公共命名空間。 – eglasius 2010-09-14 22:04:43

相關問題