Was ist die Lebensdauer eines ASP.NET MVC-Controllers?

68

Ich bin gerade dabei, meine MVC-Anwendung zu entwickeln, und dachte: Was ist die Lebensdauer einer Controller-Klasse?

Wann wird es erstellt? Wie viele Instanzen eines einzelnen Controllers gibt es? Welche Auswirkungen haben lokale Variablen? wann wird es zerstört

Ich bin mir sicher, dass irgendwo im Internet ein guter Link herumschwirrt, aber mein Google-Fu konnte ihn nicht finden.

Alastair Pitts
quelle
Steve Sanderson hat ein gutes Poster mit der MVC Request Handling Pipeline erstellt , das für Sie von Interesse sein könnte.
David Glenn

Antworten:

46

Stephen Walther hat einen großartigen Artikel über den Lebenszyklus einer Anfrage, die vom MVC Framework bearbeitet wird.

Hier ist ein Auszug aus dem Anfang seines Artikels, der jeden Schritt im Detail erklärt:

Übersicht über die Lebenszyklusschritte

Es gibt fünf Hauptschritte, die ausgeführt werden, wenn Sie eine Anfrage von einer ASP.NET MVC-Website stellen:

1. Die RouteTable wird erstellt

Dieser erste Schritt wird nur einmal ausgeführt, wenn eine ASP.NET-Anwendung zum ersten Mal gestartet wird. Die RouteTable ordnet URLs Handlern zu.

2. Das UrlRoutingModule fängt die Anforderung ab

Dieser zweite Schritt erfolgt immer dann, wenn Sie eine Anfrage stellen. Das UrlRoutingModule fängt jede Anforderung ab und erstellt und führt den richtigen Handler aus.

3. Der MvcHandler wird ausgeführt

Der MvcHandler erstellt einen Controller, übergibt dem Controller einen ControllerContext und führt den Controller aus.

4. Der Controller wird ausgeführt

Der Controller bestimmt, welche Controller-Methode ausgeführt werden soll, erstellt eine Liste von Parametern und führt die Methode aus.

5. Die RenderView-Methode wird aufgerufen

In der Regel ruft eine Controller-Methode RenderView () auf, um Inhalte wieder in den Browser zu rendern. Die Controller.RenderView () -Methode delegiert ihre Arbeit an eine bestimmte ViewEngine

Kieron
quelle
Der Artikellink von Stephen Walther ist nicht mehr gültig!
Hamed
7
Dies ist kaum eine Beschreibung der "Lebensdauer" des Controllers. Angenommen, ich möchte eine Transaktion starten, wenn der Controller erstellt wird, null oder mehr Aktionen ausführen und die Aktionen dann als Einheit festschreiben. Wann genau wird der Controller zerstört? Wann kann ich implizit die Rollback-Methode aufrufen, wenn bei einer der Aktionen ein Problem auftritt?
Quarkly
25

Vorausgesetzt, Sie ändern die Standardeinstellung nicht ControllerFactory, werden für jede Anforderung Controller erstellt und "irgendwann nach Abschluss" der Anforderung wird Müll gesammelt.

Kurz gesagt, Sie müssen sich keine Gedanken über die Rennbedingungen machen, zum Beispiel für Variablen (obwohl Sie dies natürlich für statische Variablen tun). Trotzdem würde ich empfehlen, Ihre Controller-Aktionen aus Gründen des saubereren Codes wiedereintrittsfähig zu halten.

Richard Szalay
quelle