Есть ли способ получить тип контроллера через конвейер ASP.NET MVC3? - PullRequest
1 голос
/ 05 декабря 2011

Мне нужно получить атрибуты на другом контроллере (т.е. не на текущем выполняемом).

Один из способов сделать это заключается в следующем:

    Type controllerType = Type.GetType("App1.UI.Web.Controllers." + controllerName + "Controller", true);
    object[] controllerAttributes = controllerType.GetCustomAttributes(true);

Есть ли лучший, менее хрупкий способ сделать то же самое с использованием конвейера MVC? Я не хочу создавать экземпляр контроллера, я просто хочу его атрибуты.

1 Ответ

2 голосов
/ 05 декабря 2011

Прежде чем переходить слишком далеко, имейте в виду, что Контроллер не должен заканчиваться суффиксом «Контроллер».Соглашение об именах по умолчанию для контроллеров MVC заключается в добавлении слова «Контроллер» в класс.Таким образом, вашими значениями по умолчанию являются «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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...