Монорельс - Получить все контроллеры
-
29-09-2019 - |
Вопрос
Слабо связано эта почта, Мне нужно получить список всех контроллеров в папке контроллеров. Мы просто экспериментируем с некоторыми вещами в данный момент. Я искал через 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();
}
Полезность такого метода очень сомнительна. Административные контроллеры, подобные этому на всю жизнь приложения, могут быть опасными. Контроллеры не должны быть переданы. Оставьте экземпляр ваших контроллеров к основам впрыска зависимости, которые вы используете. Их срок службы должно быть очень коротким, предпочтительно ограниченным текущим запросом пользователя.