Monorail - Get All Controllers
-
29-09-2019 - |
Frage
Ich habe zu statisch eine Liste von instanziiert-Controller habe zu schaffen, dass ich will, etwa so:
public static IList<AbstractHtmlPageController> _controllers = new List<AbstractHtmlPageController>
{
new HomeController(),
new UserController()
};
Dies ist offensichtlich keine wünschenswerte Lösung.
Prost
Lösung
Sie könnten versuchen, mithilfe von Reflektion (nicht getestet):
public static IList<AbstractHtmlPageController> GetControllers()
{
Assembly
.GetExecutingAssembly()
.GetTypes()
.Where(t =>
t != typeof(AbstractHtmlPageController) &&
typeof(AbstractHtmlPageController).IsAssignableFrom(t)
)
.Select(t => (AbstractHtmlPageController)Activator.CreateInstance(t))
.ToList();
}
Der Nutzen eines solchen Verfahrens ist höchst zweifelhaft. Instanziieren Controller wie dies für die Lebensdauer der Anwendung kann gefährlich sein. Controller sollte nicht mit anderen geteilt werden. Lassen Sie die Instanziierung Ihre Controller auf die Dependency Injection-Framework Sie verwenden. Ihre Lebensdauer sollte sehr kurz sein, vorzugsweise begrenzt auf die aktuelle Benutzeranforderung.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow