2010-09-14 63 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