63 votes

Cycle de vie du contrôleur ASP.NET MVC

C'est ma compréhension que le constructeur d'un contrôleur n'est pas appelé lors de chaque requête web. En supposant que cela soit vrai, qu'est-ce que le cycle de vie d'un contrôleur? Est est "construit" sur l'app démarrer, puis mis en cache et invoqué avec la requestcontext injecté dans chaque requête web?

Juste pour être clair, je ne suis pas demandant comment émuler constructeur de comportement, j'ai utiliser le OnActionExecuting événement pour initier les choses je le ferais normalement dans un constructeur. Aussi, j'utilise des constructeurs sur les contrôleurs de l'unité et les tests du système.

Merci!

84voto

Darin Dimitrov Points 528142

Si vous utilisez la fabrique de contrôleurs par défaut, une nouvelle instance sera construite pour chaque demande, ce qui devrait être le cas. Les contrôleurs ne doivent pas être partagés entre différentes demandes. Vous pouvez cependant écrire une fabrique personnalisée qui gère la durée de vie des contrôleurs.

13voto

Thomas Weller Points 8428

J'ai bien peur que votre compréhension soit fausse. Un contrôleur (qui doit être une classe très mince et légère et ne doit avoir aucun état de session en péril) est en fait construit à la volée pour chaque requête Web. Comment une instance de contrôleur pourrait-elle être spécifique à une vue donnée?

Il n’existe donc pas de "cycle de vie" (autre que celui de la demande) ...

7voto

Un contrôleur est créé pour chaque demande que vous faites. Permet de prendre un exemple.

   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;}


   }

Maintenant, vous pouvez appeler le contrôleur de la vue en passant un nom d'utilisateur. N'espérez pas obtenir le nom d'utilisateur que vous avez réglé dans la prochaine demande. il retournera null. Ainsi, pour chaque demande d'un nouveau contrôleur est créé. Vous n'avez pas instancier un contrôleur de n'importe où dans MVC comme vous démarrent des instances d'un objet à partir d'une classe. Simplement vous n'avez pas de contrôleur objet pointeur de la mémoire de l'appeler comme vous le faites avec d'autres objets.

Allez sur ce lien. Il y a une bonne explication sur le cycle de vie de la MVC du contrôleur.

ASP.Net MVC - Demande de Cycle de Vie

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X