Ich habe eine Frage über Singletons in IIS (6,7,7.5) und eine ASP.NET 4.0 Web Application (MVC3 App um genau zu sein).Singleton läuft auf Asp.Net Web-Anwendungen
Ich habe ein Singleton-Objekt in meinem Projekt, auf das zugegriffen wird und in der global.ascx, auf dem Anwendungsstart sowie an einigen anderen Stellen innerhalb der Anwendung verwendet wird.
Mein Problem ist, dass dieser Singleton Zugriff auf eine pro Instanz Szenario sein muss. Da IIS jedoch im Wesentlichen der Hosting-Prozess ist, wird das Singleton in allen Instanzen der Anwendung dasselbe Objekt sein?
Wenn ich das Schlüsselwort [ThreadStatic] verwende, unterscheidet es sich auf Ebene des Anwendungspools?
Schließlich gibt es einen Weg, ich kann sicherstellen, dass ein Singleton nur ein Singleton pro Instanz meiner Anwendung ist. Wenn ich meine Anwendung auf 1 Website, aber in 5 virtuellen Verzeichnissen ausführe, gibt es 5 Instanzen des Singleton oder wenn ich meine Website auf 5 verschiedenen Websites im selben Anwendungspool betreibe.
Hoffentlich ist das klar genug, wenn Sie das Singleton-Objekt sehen wollten, habe ich die allgemeine Idee darunter eingefügt.
public sealed class Singleton : IDisposable
{
[ThreadStatic]
private static volatile Singleton _instance;
[ThreadStatic]
private static readonly object _syncRoot = new object();
public bool IsReleased { get; private set; }
public Singleton()
{
IsReleased = false;
}
public static Singleton Instance
{
get
{
if (_instance == null)
{
lock (_syncRoot)
{
if (_instance == null)
_instance = new Singleton();
}
}
return _instance;
}
}
public void Dispose()
{
IsReleased = true;
Singleton._instance = null;
}
}
Ich bin immer noch verwirrt. Weißt du wie es funktioniert oder nicht? Können Sie die Frage etwas klarer stellen? – jcolebrand
Ich weiß, wie ein Singleton pro Prozessebene "funktioniert". Die Frage ist, wie IIS es in mehreren Instanzen meiner Anwendung handhaben wird. – John
Nur aus Neugier, warum ist dein Singleton wegwerfbar? Erwarten Sie Zeiträume, in denen Sie möchten, dass sie entsorgt werden, und dann wieder auferstehen, wenn jemand danach fragt? Echte Singletons werden typischerweise nicht angeordnet, bis die Anwendung endet. – StriplingWarrior