c# webform Ciclo di vita del controller ASP.NET MVC




vs 2017 asp net mvc (3)

Viene creato un controller per ogni richiesta effettuata. Prendiamo un esempio.

   public class ExampleController : Controller{
           public static userName;

            public void Action1(){//do stuff}
            public void Action2(){//do stuff}
            public void AssignUserName(string username){
                 userName = username;

            }
           public string GetName(){ return userName;}


   }

Ora puoi chiamare il controller dalla vista passando un nome utente. Non sperare di ottenere l'userName impostato nella prossima richiesta. restituirà null. Quindi per ogni richiesta viene creato un nuovo controller. Non istanzia un controller in nessun punto di MVC come se instiasassi un oggetto da una classe. Semplicemente non hai il puntatore di memoria dell'oggetto controller per chiamarlo come fai con altri oggetti.

Vai a questo link. C'è una buona spiegazione sul ciclo di vita del controller MVC.

ASP.Net MVC - Richiesta di ciclo di vita

Mi risulta che il costruttore di un controller non venga chiamato durante ogni richiesta web. Supponendo che questo sia vero, qual è il ciclo di vita di un controller? Is è "costruito" all'avvio dell'app, quindi memorizzato nella cache e invocato con requestcontext inserito in esso con ogni richiesta web?

Per essere chiari, non sto chiedendo come emulare il comportamento del costruttore, io uso l'evento OnActionExecuting per avviare le cose che normalmente farei in un costruttore. Inoltre, utilizzo i costruttori sui controller per i test di unità e di sistema.

Grazie!


Se si utilizza il controller di fabbrica predefinito, verrà costruita una nuova istanza per ogni richiesta e così dovrebbe essere. I controller non devono essere condivisi tra diverse richieste. Potresti scrivere un factory personalizzato che gestisca la durata dei controller.


Ho paura, la tua comprensione è sbagliata. Un controller (che dovrebbe essere una classe molto sottile e leggera e non deve avere nessuno stato di uscita della sessione) è in realtà costruito al volo per ogni singola richiesta web. In quale altro modo un'istanza del controllore può essere specifica per una determinata vista?

Quindi non esiste un "ciclo di vita" (diverso da quello della richiesta) ...





asp.net-mvc