Ich habe den folgenden Code Umsetzung meiner generic Singleton Anbieter:Wie ein vollständig träges Singleton für Generika schaffen
public sealed class Singleton<T> where T : class, new()
{
Singleton()
{
}
public static T Instance
{
get { return SingletonCreator.instance; }
}
class SingletonCreator
{
static SingletonCreator()
{
}
internal static readonly T instance = new T();
}
}
Diese Probe von 2 Artikel genommen wurde und ich zusammen den Code mir zu bekommen, was ich wollte:
http://www.yoda.arachsys.com/csharp/singleton.html und http://www.codeproject.com/Articles/11111/Generic-Singleton-Provider.
Dies ist, wie ich versuchte, über den Code zu verwenden:
public class MyClass
{
public static IMyInterface Initialize()
{
if (Singleton<IMyInterface>.Instance == null // Error 1
{
Singleton<IMyInterface>.Instance = CreateEngineInstance(); // Error 2
Singleton<IMyInterface>.Instance.Initialize();
}
return Singleton<IMyInterface>.Instance;
}
}
und die Schnittstelle:
public interface IMyInterface
{
}
Der Fehler bei Error 1
ist:
'MyProject.IMyInterace' must be a non-abstract type with a public parameterless constructor in order to use it as parameter 'T' in the generic type or method 'MyProject.Singleton<T>'
Der Fehler bei Error 2
ist:
Property or indexer 'MyProject.Singleton<MyProject.IMyInterface>.Instance' cannot be assigned to -- it is read only
Wie kann ich das beheben, so dass es mit den 2 oben genannten Artikeln übereinstimmt? Irgendwelche anderen Ideen oder Vorschläge werden geschätzt.
Durchbricht meine Implementierung das Singleton-Muster?
Singleton ist tot; [Lifetime/Scoping sollte in diesen Tagen durch Dependency-Injection-Container gehandhabt werden] (http://stackoverflow.com/questions/4484619/does-mef-lend-any-value-to-the-singleton-pattern/4484889#4484889). –
Absolut. Es liegt in der Verantwortung des Singletons, den Lebenszyklus eines einzelnen Objekts zu erstellen und zu steuern, aber Sie versuchen, der Instanzeigenschaft der Singleton-Klasse OUTSIDE dieser Klasse einen Wert zuzuweisen. Was Sie wirklich versuchen, was ich sehe, ist die Abhängigkeitsinjektion und die Schnittstellen-basierte Programmierung. Singleton ist nur nützlich, wenn Sie versuchen, Sparce-Ressourcen (Datenbankverbindung zum Beispiel) zu verwenden, und sollte mit Vorsicht verwendet werden (sogar vermieden) –
Ich versuche, eine Engine für meine Web-Mvc-App zu erstellen, es behandelt alles, was ich brauche , Abhängigkeitsinjektion, und ich möchte nur 1 Instanzen dieser Instanz existieren. –