46 Stimmen

Singleton mit Parametern

Ich brauche eine Singleton-Klasse, die mit einigen Argumenten instanziiert wird. Die Art und Weise, wie ich es jetzt tue, ist:

class SingletonExample
{
     private SingletonExample mInstance;
     //other members... 
     private SingletonExample()
     {

     } 
     public SingletonExample Instance
     {
         get
         {
              if (mInstance == null)
              {
                  throw new Exception("Object not created");
              }
              return mInstance;
         }
     }

     public void Create(string arg1, string arg2)
     {
         mInstance = new SingletonExample();
         mInstance.Arg1 = arg1;
         mInstance.ObjectCaller = new ObjectCaller(arg2);
         //etc... basically, create object...
     } 
}

Die Instanz wird "spät" erstellt, was bedeutet, dass ich beim Start der Anwendung nicht alle benötigten Argumente habe.

Im Allgemeinen mag ich es nicht, eine Reihenfolge von Methodenaufrufen zu erzwingen, aber hier sehe ich keine andere Möglichkeit. Das IoC würde es auch nicht lösen, denn wo ich es im Container registrieren kann, kann ich auch Create() aufrufen...

Halten Sie dies für ein gutes Szenario? Haben Sie eine andere Idee?

bearbeiten : I wissen dass das, was ich als Beispiel geschrieben habe, nicht thread-sicher ist, thread-sicher ist nicht Teil der Frage

0 Stimmen

Das ist no ein Singleton. Wo ist der gegenseitige Ausschluss? (d.h. lock ). plus Ihre getter für die Instanz sollte die Instanz erzeugen, nicht den Ctor - das ist der Sinn der Sache.

0 Stimmen

Ich stimme mit RPM1984 überein, dass es sich nicht um ein Singleton handelt. Können sich Ihre Argumente ändern oder bleiben sie während der gesamten Lebensdauer Ihrer Anwendung gleich? Ein Singleton sollte nicht von einer Variablen abhängen, es könnte von der Konfiguration oder einem anderen Singleton abhängen. Wie auch immer, denken Sie wirklich über Ihren Entwurf nach und fragen Sie sich, ob Sie ein Singleton brauchen. Eine übermäßige Verwendung von Singletons ist wirklich schlecht für Ihr Design.

1 Stimmen

Es ist schon ein Einzelfall, glauben Sie mir :) die getter kann die Instanz nicht erstellen, da es keine Argumente hat - es könnte, aber es ist einfach bequemer, es so zu schreiben. Und die Argumente, einmal erhalten, ändern sich nicht.

0voto

DaVinci Punkte 1391

Ich kann tatsächlich kein Singleton in Ihrem Code sehen. Verwenden Sie eine statische, parametrisierte getInstance-Methode, die das Singleton zurückgibt und es erstellt, wenn es zuvor nicht verwendet wurde.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X