我需要掌握另一个Controller上的属性(即不是当前正在执行的属性)。
执行此操作的一种方法如下:
Type controllerType = Type.GetType("App1.UI.Web.Controllers." + controllerName + "Controller", true);
object[] controllerAttributes = controllerType.GetCustomAttributes(true);
使用MVC管道是否有更好,更不易碎的方法?我不想实例化控制器,我只想要它的属性。
答案 0 :(得分:2)
在滚动太远之前,请记住控制器不必以后缀“Controller”结束。 MVC控制器的默认命名约定是在类上附加单词“Controller”。所以你的默认值是“HomeController”和“AboutController”。您可以轻松地创建一个名为“MyHome”或“Dashboard”的类,并让它继承自Controller,它将是一个没有“Controller”后缀的控制器。
我过去曾创建过路线约束。以下是我使用的代码片段:
List<Type> _type = Assembly
.GetCallingAssembly()
.GetTypes()
.Where(type => type.IsSubclassOf(typeof(Controller)))
.ToList()
代码的作用是在当前程序集中查找作为控制器的所有类。您还可以在以下位置添加一些代码:
.Where(type => type.IsSubclassOf(typeof(Controller)) && type.Name.ToLower() == "homecontroller")