Я пытаюсь получить список всех общедоступных методов, которые возвращают ActionResult из любого контроллера в моем решении с использованием отражения, но я испытываю странное поведение.Итерация над контроллерами в решении
Assembly asm = Assembly.GetAssembly(typeof(MyDLL.MvcApplication));
var controllerActionList = asm.GetTypes().ToList();
Если я запускаю приведенный выше код я получаю список всех моих типов, включая все мои модели и контроллеры и т.д. так же, как я бы ожидать. Однако, если я изменю его и запустил код ниже, мой список результатов вернется пустым. Любая идея, что здесь происходит? Я бы подумал, что это должно фильтровать типы вниз, поэтому я получаю список всех контроллеров правильно?
Assembly asm = Assembly.GetAssembly(typeof(MyDLL.MvcApplication));
var controllerActionList = asm.GetTypes()
.Where(type => typeof(Controller).IsAssignableFrom(type)).ToList();
Ваш код действительно должен работать. Вместо typeof (Controller) вы можете попробовать typeof (System.Web.Mvc.Controller)? Затем следует сообщать о любых подклассах System.Web.Mvc.Controller. –
Ya Я уже пробовал, и это не сработало, но я понял, что это работает странным образом. Я думаю, что версия .net, которую использует этот проект, не совсем то же самое, что и используемая целевая DLL, и это приводит к тому, что сравнение типов всегда терпит неудачу. Проверьте мой ответ ниже, как я получил его, делая то, что хочу. Спасибо за помощь! –