Würden Sie dies für ein Singleton / Singleton-Muster halten?

Stellen Sie sich vor, ich hätte in der Datei Global.asax.cs eine Instanzklasse als privates Feld. Sagen wir so:

private MyClass _myClass = new MyClass();

Und ich hatte eine statische Methode für Global namens GetMyClass (), die die aktuelle HttpApplication abruft und diese Instanz zurückgibt.

public static MyClass GetMyClass()
{
    return ((Global)HttpContext.Current.ApplicationInstance)._myClass;
}

So konnte ich die Instanz über die aktuellen Anforderungen httpapplication abrufen, indem ich Global.GetMyClass () aufrief.

Beachten Sie, dass es mehr als eine (globale) HttpApplication gibt. Es gibt eine HttpApplication für jede Anfrage und sie werden gepoolt / geteilt, so dass es im wahrsten Sinne des Wortes keine echte istSingleton. Aber es folgt bis zu einem gewissen Grad dem Muster.

Würden Sie dies also, wie in der Frage gestellt, zumindest als Singleton-Muster betrachten?

Würden Sie sagen, es sollte nicht verwendet werden? Würden Sie von seiner Verwendung abraten? Würden Sie sagen, es ist einmöglicherweise schlechte Praxis wie ein echter Singleton.

Konnten Sie Probleme feststellen, die sich aus dieser Art von Nutzungsszenario ergeben können?

Oder würdest du sagen, es ist kein echter Singleton, also ist es in Ordnung und keine schlechte Übung. Würden Sie dies als semi-quasi-Singleton empfehlen, bei dem eine Instanz pro Anforderung erforderlich ist? Wenn nicht, welches andere Muster / Vorschlag würden Sie verwenden / geben?

Hast du jemals so etwas benutzt?

Ich habe dies in früheren Projekten verwendet, bin mir aber nicht sicher, ob ich mich davon fernhalten soll. In der Vergangenheit hatte ich jedoch noch nie Probleme.

Bitte geben Sie mir Ihre Gedanken und Meinungen dazu.

Ich frage nicht, was ein Singleton ist. Und ich betrachte eine singleton schlechte Praxis, wenn sie unsachgemäß verwendet wird, was in vielen vielen Fällen der Fall ist. Das bin ich. Das ist jedoch nicht das, worüber ich sprechen möchte. Ich versuche, dieses Szenario zu diskutieren, das ich gegeben habe.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage