我有一个使用“静态只读 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.
注意 - 当然,模式必须是线程安全的。
编辑- 出于生产代码的目的,这是一个真正的单例。问题是它锁定了一些文件,因此为了在单元测试中进行清理,我们必须处理它。
如果可能的话,我也更喜欢可以重复使用的模式。