J'ai un singleton qui utilise le "statique T instance en instance = new T();" modèle. Cependant, je suis tombé sur un cas où T est jetable, et doit effectivement être disposé pour des tests unitaires. Comment puis-je modifier ce modèle pour soutenir un singleton jetable?Singleton jetable en C#
L'interface que je voudrais 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.
Édition - pour les besoins du code de production, il s'agit d'un vrai singleton. Le truc c'est que ça bloque certains fichiers, et donc pour le nettoyage dans les tests unitaires nous devons le jeter.
Je préférerais également un modèle qui peut être réutilisé, si possible.
Si vous pouvez faire de nouveaux T() cela signifie que vous doit avoir une contrainte générique de T ayant un constructeur public sans paramètre - auquel cas ce n'est pas un singleton pour commencer. –
Je viens de l'écrire comme un motif, ce n'est pas vraiment générique en ce moment. Ce que j'ai, c'est une classe qui appelle son constructeur privé et l'assigne au champ public static readonly. – ripper234