Betrachten Sie bitte das folgende Szenario:
- Ich habe eine vollständige Webanwendung mit dem ASP.NET MVC 3 Framework erstellt. Jetzt wird meine Anwendung von einem Webserver verwaltet.
- Auf der Server-Seite meiner Anwendung geht eine HTTP-Anfrage ein.
- Eine Klasse, die das Singleton-Entwurfsmuster implementiert, wird auf der Serverseite instanziiert.
- Eine Antwort wird an den Browser gesendet.
- Eine weitere HTTP-Anfrage wird auf der Server-Seite meiner Anwendung empfangen. Ist die in Schritt 2 verwendete Singleton-Instanz auf der Serverseite noch verfügbar?
Ich habe auf dieser Seite einige Informationen über den Lebenszyklus einer ASP.NET-Anwendung gelesen: http://msdn.microsoft.com/en-us/library/ms178473.aspx
Aber ich bin immer noch nicht in der Lage, meine Frage zu beantworten.
Vielen Dank im Voraus für Ihre zukünftige Hilfe
Ich habe gerade einige Tests unter VS2010 gemacht.
Hier ist die Liste der Hauptkomponenten meines Projekts:
- Der Home-Controller, der eine Index-HttpGet-Aktionsmethode enthält.
- Die Ansicht, die sich aus der Aktionsmethode Index ergibt.
- Die SingletonTest-Klasse, die das Singleton-Entwurfsmuster implementiert.
Hier ist der Code der SingletonTest-Klasse:
public class SingletonTest
{
private int counter;
private static SingletonTest instance = null;
public int Counter
{
get
{
return counter;
}
}
public static SingletonTest Instance
{
get
{
if (instance == null)
instance = new SingletonTest();
return instance;
}
}
private SingletonTest()
{
counter = 0;
}
public void IncrementCounter()
{
counter++;
}
}
Hier ist der Code der Methode Index action :
public ActionResult Index()
{
SingletonTest st = SingletonTest.Instance;
st.IncrementCounter();
return View();
}
Hier ist der Code der Ansicht :
@SingletonTest.Instance.Counter
Hier das Testszenario, das ich verfolgt habe:
- Der IIS-Server wurde automatisch von VS2010 gestartet.
- Ich habe die URL /Home/Index/ angefordert und der Wert 1 wurde angezeigt.
- Ich habe die URL /Home/Index/ angefordert, dann wurde der Wert 2 angezeigt.
- ...
Dieser Test zeigt, dass die in Schritt 1 erstellte SingletonTest-Instanz bei der Verarbeitung der nächsten Anfragen verfügbar ist. Ich vermute, dass meiner Webanwendung auf dem Server ein Speicherplatz zugewiesen wurde.
Dann habe ich den IIS-Server gestoppt und mein Testszenario erneut durchgeführt. Ich habe die gleichen Ergebnisse wie zuvor erhalten: 1, 2, ....