MonoRail - получить все контроллеры - PullRequest
0 голосов
/ 17 августа 2010

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

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

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

Очевидно, что это нежелательное решение.

Приветствия

1 Ответ

1 голос
/ 17 августа 2010

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

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

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

...