Jetable singleton en C#

J'ai un singleton qui utilise le "static readonly T Instance = new T();" modèle. Cependant, j'ai couru dans un cas où T est jetable, et en fait doit être éliminée pour les tests unitaires. Comment puis-je modifier ce schéma à l'appui d'un revenu singleton?

L'interface, je voudrais, c'est quelque chose comme:

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.

Note - le modèle doit être thread-safe, bien sûr.

Modifier - pour les fins de la production de code, c'est un vrai singleton. Le truc, c'est que, il bloque certains fichiers, et donc pour le nettoyage dans les tests unitaires, nous avons à mettre au rebut.

Je préfère également un modèle qui peut être réutilisé, si possible.

  • Si vous pouvez faire de nouveaux T() qui signifie que vous devez avoir une contrainte générique de T avoir un public constructeur sans paramètre - dans ce cas, c'est pas un singleton pour commencer.
  • J'ai juste écrit comme un modèle, il n'est pas vraiment droit générique maintenant à tous. Ce que j'ai est une classe qui appelle son constructeur privé et l'assigne au public static readonly champ.
InformationsquelleAutor ripper234 | 2008-10-22