У меня есть singleton, который использует "static readonly T Instance = new T();" шаблон. Однако я столкнулся с ситуацией, когда T является одноразовым, и на самом деле его нужно утилизировать для модульных тестов. Как изменить этот шаблон для поддержки одноразового одноэлемента?
Мне нужен интерфейс:
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.
Примечание - шаблон должен быть потокобезопасным, конечно.
Изменить - для производственного кода это настоящий синглтон. Дело в том, что он блокирует некоторые файлы, и поэтому для очистки в модульных тестах мы должны утилизировать его.
Я также предпочел бы шаблон, который можно использовать повторно, если это возможно.