Generisk singleton / friend i C#
Jeg ønsker at skrive en generisk singleton klasse, inspireret af en lignende implementation, jeg før har brugt i C++. Jeg er imidlertid løbet ind i et problem: Hvordan sikrer jeg at kun én instans af klassen kan oprettes, samtidig med at Singleton klassen kan oprette en instans af klassen ?Hvis jeg erklærer:
public class Singleton<T> where T : class, new() {}
Så har jeg klasse, der kan instantiere typen T, men kun hvis den har en public constructor. Hvis den har en public constructor, kan man jo instantiere flere objekter af klassen, hvilket jeg ikke ønsker. Illustreret i kode ser det sådan ud:
public class MyClass : Singleton<MyClass>
{
// private MyClass() { ... } // Compile error
public MyClass() {...} // OK
}
Hvordan løser jeg det problem ? Kan det passe at C# mangler en "friend class" konstruktion eller lignende, der kan løse dette ?
