Ich stieß heute auf ein Problem und ein Freund empfahl mir, eine globale statische Instanz oder eleganter ein Singleton-Muster zu verwenden. Ich verbrachte ein paar Stunden lesen über Singletons, aber ein paar Dinge noch entkommen mir.
Hintergrund: Was Im versuchen zu erreichen ist die Erstellung einer Instanz einer API und verwenden diese eine Instanz in allen meinen Klassen (im Gegensatz zu eine neue Verbindung, etc.).
Es scheint etwa 100 Möglichkeiten zu geben, ein Singleton zu erstellen, aber mit etwas Hilfe von Yoda Ich habe einige fadensichere Beispiele gefunden. also den folgenden Code gegeben:
public sealed class Singleton
{
public static Singleton Instance { get; private set; }
private Singleton()
{
APIClass api = new APIClass(); //Can this be done?
}
static Singleton() { Instance = new Singleton(); }
}
Wie/wo würden Sie diese neue Klasse instanziieren und wie sollte sie von einer separaten Klasse aufgerufen werden?
EDIT: Mir ist klar, dass die Singleton-Klasse mit etwas aufgerufen werden kann wie
Singleton obj1 = Singleton.Instance();
aber wäre ich in der Lage, auf die Methoden innerhalb der APIs-Klasse (z. B. obj1.Start) zuzugreifen? (nicht dass ich das müsste, ich frage nur)
EDIT #2: Ich könnte ein bisschen voreilig bei der Überprüfung der Antwort gewesen sein, aber ich habe eine kleine Sache, die immer noch Probleme verursacht mich. Die API startet einwandfrei, leider bin ich in der Lage, zwei Instanzen zu starten?
Neuer Code
public sealed class SingletonAPI
{
public static SingletonAPI Instance { get; private set; }
private SingletonAPI() {}
static SingletonAPI() { Instance = new SingletonAPI(); }
// API method:
public void Start() { API myAPI = new API();}
}
aber wenn ich versuche, so etwas zu tun...
SingletonAPI api = SingletonAPI.Instance;
api.Start();
SingletonAPI api2 = SingletonAPI.Instance; // This was just for testing.
api2.Start();
Ich erhalte die Fehlermeldung, dass ich nicht mehr als eine Instanz starten kann.