gpt4 book ai didi

c# - C#中的一次性单例

转载 作者:可可西里 更新时间:2023-11-01 08:16:07 24 4
gpt4 key购买 nike

我有一个使用“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.

注意 - 当然,模式必须是线程安全的。

编辑 - 出于生产代码的目的,这是一个真正的单例。问题是它会锁定一些文件,因此为了在单元测试中进行清理,我们必须处理它。

如果可能的话,我也更喜欢可以重复使用的模式。

最佳答案

老实说,那时我认为我真的不再认为它是一个单例。

特别是,如果客户使用单例,他们真的不会期望必须处理它,如果其他人这样做,他们会感到惊讶。

您的生产代码将做什么?

编辑:如果你真的,真的需要这个用于单元测试并且用于单元测试(坦率地说,这在设计方面听起来有问题)那么你总是可以使用反射来摆弄这个领域.最好弄清楚它是否应该真的是一个单例,或者它是否应该真的是一次性的——两者很少一起出现。

关于c# - C#中的一次性单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/225686/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com