Domanda

questo post , ho bisogno di ottenere un elenco di tutti i controller nella cartella controllori. Stiamo solo sperimentando con alcune cose in questo momento. Ho cercato attraverso API ecc senza alcuna fortuna. Posso ottenere il controllo di corrente più che bene, ma non gli altri purtroppo.

Ho dovuto staticamente creare un elenco di controller istanziati che voglio, in questo modo:

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

Questo, ovviamente, non è una soluzione desiderabile.

Saluti

È stato utile?

Soluzione

Si potrebbe provare a utilizzare la riflessione (hanno non testato):

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

L'utilità di tale metodo a è altamente dubbia. Instantiating controller come questo per la durata dell'applicazione può essere pericoloso. Controller non dovrebbero essere condivisi. Lasciare l'istanza dei controller al quadro iniezione di dipendenza che si sta utilizzando. La loro vita deve essere molto breve, preferibilmente limitata alla richiesta dell'utente corrente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top