2010-10-21 27 views
10

Quando a un'applicazione asp.net viene notificata una URL, la indirizza al controller appropriato e in particolare al metodo appropriato.Come sono istanziati i controller asp.net mvc 2?

Questi controllori sono posizionati in pila una volta? Oppure vengono istanziati di nuovo per ogni richiesta?

Ad esempio, supponiamo di avere un controller con una classe linq-to-sql che viene istanziata nella dichiarazione della classe. Se ho n richieste che instradano verso quel controller, ho generato n diversi oggetti di classe linq-to-sql, ognuno nella propria istanza di controller o solo 1?

Il mio istinto mi dice che i controller sono generati uno per richiesta per motivi di sicurezza del thread, ma non riesco a trovare una guida migliore del mio oracolo gastrointestinale.

+2

+1 per l'uso di oracolo gastrointestinale in una domanda. –

+0

* oracolo gastrointestinale *, lol :-)))))))) +1 –

risposta

7

Vengono istanziati di volta in volta per DefaultControllerFactory per impostazione predefinita. In particolare, nel GetControllerInstance,

(IController)Activator.CreateInstance(controllerType); 

CreateController viene prima chiamato che chiama GetControllerType per ottenere il tipo di controller in base al nome del controller e gli spazi dei nomi passati nelle gettoni dati del percorso. Quindi chiama GetControllerInstance che crea un'istanza del controller.

Non esiste una guida migliore rispetto allo MVC framework source code itself.

È possibile definire il proprio ControllerFactory implementando IControllerFactory e quindi controllare come e quando i controller vengono istanziati.

+0

Grazie. Questo è dettagliato da qualche parte sul msdn? Mi sembra di avere uno scatto 50/50 quando si tratta di rispondere alle mie domande con esso. – MushinNoShin

+1

Sono stati aggiornati con un collegamento al codice sorgente. È inestimabile per i curiosi tra noi :) –

+2

Avere il codice sorgente da esaminare è una cosa, ma se si segue la seguente guida per configurare il server di origine è possibile scorrere il codice così com'è che dà un'idea veramente buona di come funziona http://weblogs.asp.net/gunnarpeipman/archive/2010/07/04/stepping-into-asp-net-mvc-source-code-with-visual-studio-debugger.aspx – Chao