2010-03-01 10 views
59

Sono in procinto di sviluppare la mia applicazione MVC e stavo pensando, qual è la durata di una classe controller?Qual è la durata di un controller MVC ASP.NET?

Quando viene creato? Quante istanze di un singolo controller ci sono? quali sono le implicazioni delle variabili locali? quando viene distrutto?

Sono sicuro che c'è un buon collegamento da qualche parte in giro su Internet, ma il mio google-fu non riusciva a trovarlo.

+0

Steve Sanderson ha prodotto un buon poster raffigurante l'MVC [Request Pipeline Handling] (http: //blog.stevensanderson.it/2009/10/08/aspnet-mvc-learning-resource-request-handling-pipeline-poster /) che potrebbero interessarti. –

risposta

44

Stephen Walther ha un ottimo article sul ciclo di vita di una richiesta gestita da MVC Framework.

Ecco un estratto dalla parte superiore del suo articolo, si va avanti a spiegare ogni passo in dettaglio:

Panoramica delle fasi del ciclo di vita

Ci sono cinque fasi principali che si verificano quando si fare una richiesta da un sito ASP.NET MVC:

1. Il RouteTable è creati

Questo primo passaggio si verifica una sola volta all'avvio di un'applicazione ASP.NET. RouteTable mappa gli URL verso i gestori.

2. I UrlRoutingModule intercetta la richiesta

Questa seconda fase si verifica ogni volta che si effettua una richiesta. UrlRoutingModule intercetta ogni richiesta e crea ed esegue il handler di destra.

3. Il MvcHandler Esegue

Il MvcHandler crea un controller, passa il controller un ControllerContext, ed esegue il controller.

4. Il controllore esegue

Il controllore determina il metodo di controllo da eseguire, crea un elenco di parametri, ed esegue il metodo.

5. Il metodo è chiamato renderView

Tipicamente, un metodo di controllo richiama renderView() per rendere il contenuto al browser. I Controller.RenderView() metodo di delega il suo lavoro a un particolare ViewEngine

+0

Il link dell'articolo di Stephen Walther non è più valido! – Hamed

+1

Questa non è una descrizione della "durata" del controller. Diciamo che voglio iniziare una transazione quando il controller è stato creato, eseguire zero o più azioni e quindi eseguire il commit delle azioni come un'unità. Quando, esattamente, il controller è stato distrutto? Quando posso chiamare implicitamente il metodo "Rollback" quando c'è un problema con una delle azioni? –

16

Supponendo di non modificare il valore predefinito ControllerFactory, verranno creati i controllori per ogni richiesta e saranno garbage collection "qualche tempo dopo" la richiesta è stata completata .

In breve, non c'è bisogno di preoccuparsi di condizioni di gara per le variabili di istanza (anche se lo fai per le variabili statiche, ovviamente). Detto questo, consiglierei di mantenere le azioni del controller rientranti per motivi di codice più pulito.

Problemi correlati