Вопрос

Слабо связано эта почта, Мне нужно получить список всех контроллеров в папке контроллеров. Мы просто экспериментируем с некоторыми вещами в данный момент. Я искал через API и т. Д. И т. Д. Без удачи. Я могу получить текущий контроллер просто хорошо, но не остальные к сожалению.

Мне пришлось статически создать список экземпляров контроллеров, которые я хочу, например:

public static IList<AbstractHtmlPageController> _controllers = new List<AbstractHtmlPageController>
{
    new HomeController(),
    new UserController()
};

Это, очевидно, не желаемое решение.

Ваше здоровье

Это было полезно?

Решение

Вы можете попробовать использовать отражение (не проверено):

public static IList<AbstractHtmlPageController> GetControllers()
{
    Assembly
        .GetExecutingAssembly()
        .GetTypes()
        .Where(t => 
            t != typeof(AbstractHtmlPageController) && 
            typeof(AbstractHtmlPageController).IsAssignableFrom(t)
        )
        .Select(t => (AbstractHtmlPageController)Activator.CreateInstance(t))
        .ToList();
}

Полезность такого метода очень сомнительна. Административные контроллеры, подобные этому на всю жизнь приложения, могут быть опасными. Контроллеры не должны быть переданы. Оставьте экземпляр ваших контроллеров к основам впрыска зависимости, которые вы используете. Их срок службы должно быть очень коротким, предпочтительно ограниченным текущим запросом пользователя.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top