Ich habe ein Singleton, das die "statische readonly T Instance = new T();" Muster. Ich stieß jedoch auf einen Fall, bei dem T wegwerfbar ist und tatsächlich für Komponententests entsorgt werden muss. Wie kann ich dieses Muster ändern, um ein Einweg-Singleton zu unterstützen?Einweg-Singleton in C#
Die Schnittstelle Ich mag würde, ist so etwas wie:
var x = Foo.Instance;
var y = Foo.Instance; // x == y
...
x.Release(); // this causes the next Foo.Instance to return a fresh object
// also, it assumes no further operations on x/y will be performed.
Hinweis - das Muster Thread-sicher, natürlich sein.
Bearbeiten - für den Zweck der Produktion Code ist dies ein echtes Singleton. Die Sache ist, dass es einige Dateien sperrt, und so müssen wir es zur Säuberung in Komponententests entsorgen.
Ich würde auch ein Muster bevorzugen, das wiederverwendet werden kann, wenn möglich.
Wenn Sie neue T tun können(), das bedeutet, dass Sie muss eine generische Einschränkung von T haben, die einen öffentlichen parameterlosen Konstruktor hat - in diesem Fall ist es kein Singleton, mit dem man beginnen kann. –
Ich habe es nur als Muster geschrieben, es ist überhaupt nicht wirklich generisch. Was ich habe, ist eine Klasse, die ihren privaten Konstruktor aufruft und sie dem öffentlichen statischen Readonly-Feld zuweist. – ripper234