【发布时间】:2011-05-06 14:46:27
【问题描述】:
依靠IOC框架来实现单例是不是更好?听说无论是双重检查锁定还是依赖静态构造函数都不是好习惯,是这样吗?
【问题讨论】:
-
我有点厌倦了整个“双重检查锁定不起作用”的模因。 正确实现的双重检查锁定在 .NET 中工作得很好 ...这并不是说您正朝着正确的方向前进。我倾向于尽可能避免单身;它们通常是不必要的。
-
@Andrew:OP 并没有说它不起作用。他们说他们听说这是不好的做法——我同意这一点。做对是很繁琐的,而且几乎总是有更简单的方法也能很好地工作。 (我可以依赖静态构造函数如果它做的工作相对较少,请注意。)
-
@Jon Skeet - 你是对的;不知道为什么我读到“不起作用”,而他不是这么说的。
-
@Chris:我说过
volatile可以让它工作,其他内存障碍也可以让它工作,但专家们对确切需要什么意见不一。当专家不同意时,我不会尝试提供更多关于该怎么做的信息:) 这就是我避免 DCL 的原因——它很容易出错,而且很难准确推理。我喜欢 .NET 4 中的Lazy<T>,我相信它会做正确的事 :) -
@Chris:我试图解释为什么我没有详细说明。至于其他内存障碍:比如调用
Thread.MemoryBarrier。
标签: c#