So lassen Sie eine andere Singleton-Klasse instanziieren, indem Sie verschiedene Parameter an den Konstruktor übergeben

Zaki-Sätze

Ich habe eine Klasse in meinem Projekt und möchte sie nur einmal instanziieren, indem ich einen bestimmten Parameter über den Konstruktor übergebe. Wenn ich jedoch einen anderen Parameter übergebe, sollte ein neuer instanziiert werden. Wie kann ich dies mit dem Singleton-Designmuster erreichen? Oder können Sie ein anderes Entwurfsmuster vorschlagen, wenn es mit einem Singleton nicht erreicht werden kann?

class Program
{
static void Main()
{
    SiteStructure s = SiteStructure.Instance;
}
}

public sealed class SiteStructure
{
static readonly SiteStructure _instance = new SiteStructure();
public static SiteStructure Instance
{
    get
    {
        return _instance;
    }
}
SiteStructure()
{
    // Initialize.
}
}
Jayv

Sie müssen die Art und Weise ändern, wie die _instanceVariable initialisiert wird, indem Sie eine Funktion verwenden, die den Parameterwert akzeptiert, den Sie übergeben möchten. Außerdem kann die _instanceVariable nicht mehr so ​​sein, readonlywie sie innerhalb der neuen Funktion initialisiert werden muss.

[TestMethod]
public void CreateSingletonInstance()
{
    SiteStructure s = SiteStructure.GetInstance("Abc123");
    Debug.Print(s.Parameter); // outputs Abc123

    SiteStructure s2 = SiteStructure.GetInstance("Is it really a singleton?");
    Debug.Print(s2.Parameter); // outputs Is it really a singleton?

    SiteStructure s3 = SiteStructure.GetInstance("Abc123");
    Debug.Print(s3.Parameter); // outputs Abc123

    Assert.AreNotEqual(s, s2); // Check to make sure they are different instances
    Assert.AreEqual(s, s3); // Check to make sure they are the same instance
}

public sealed class SiteStructure
{
    static Dictionary<string, SiteStructure> _siteStructures = new Dictionary<string, SiteStructure>();
    static object _instance_Lock = new object();
    public static SiteStructure GetInstance(string parameter)
    {
        if (!_siteStructures.ContainsKey(parameter))
        {
            lock (_instance_Lock)
            {
                if (!_siteStructures.ContainsKey(parameter))
                {
                    _siteStructures.Add(parameter, new SiteStructure(parameter));
                }
            }
        }

        return _siteStructures[parameter];
    }

    private SiteStructure(string parameter)
    {
        // Initialize.
        Parameter = parameter;
    }

    public string Parameter { get; set; }
}

Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.

Bei Verstößen wenden Sie sich bitte [email protected] Löschen.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

TOP Liste

  1. 1

    Hangfire funktioniert nicht wie erwartet mit ASP.NET Core 3.1

  2. 2

    Konvertiert nicht von Methodengruppe in Func <int>

  3. 3

    Wie berechnet man den Gesamtpreis einer Bestellung mit Rails?

  4. 4

    Identifizieren Sie die Werte der ersten Spalte pro ID und arbeiten Sie basierend auf diesem Wert

  5. 5

    Konvertieren Sie eine Textdatei mit mehreren Trennzeichen in CSV

  6. 6

    So greifen Sie auf eine Variable in einer Singleton-Klasse zu, die von einem Modul in Play 2.5 Scala verwendet wird

  7. 7

    So aktualisieren oder aktualisieren Sie alle Fragmente vom Viewpager Android

  8. 8

    Wie implementiere ich die "equals" -Methode für Generika mit "instanceof"?

  9. 9

    Probleme beim numerischen Integrieren einer multivariablen Funktion WRT einer einzelnen Variablen in Julia (mit hcubature)

  10. 10

    Was ist die idiomatischste Rust-Methode, um ein optionales Element eines Vec bedingt zu ändern?

  11. 11

    Printf gibt Zeichen aus, die über die angegebene Länge des Arrays hinausgehen

  12. 12

    So installieren Sie ein privates NPM-Paket über SSH

  13. 13

    findOneAndUpdate mit Push-Array-Elementen gibt Fehler im Mungo

  14. 14

    So verschieben Sie ein Bild in Flutter/Dart mit einem Draggable

  15. 15

    Verwendung eines Winkelmessers für Leistungstests

  16. 16

    Wie erstelle ich ein Objekt für ein Django-Modell mit vielen zu vielen Feldern?

  17. 17

    Beziehungen auf zusammengesetzten Schlüsseln mit sqlalchemy

  18. 18

    c # itextsharp absolute Textposition mehrzeilig

  19. 19

    Wie kann ich eine verschachtelte Schleife mit lapply in R ersetzen?

  20. 20

    Sind die folgenden 3 Möglichkeiten, Objekte zu definieren, identisch?

  21. 21

    Wie konvertiere ich einen Vektor von Bytes (u8) in eine Zeichenfolge?

heißlabel

Archiv