单例实现问题

本文关键字:问题 实现 单例 | 更新日期: 2023-09-27 17:55:23

依靠IOC框架来实现单例更好吗?我听说双重检查锁定或依赖静态构造函数都不是好的做法,这是真的吗?

单例实现问题

在我看来,对象的生存期应该由上下文创建它决定,而不是由对象的类型强制执行。在常识中,不是保证对象的"单例性"的方法被认为是不好的做法,而是单例模式本身的使用。

因此,要回答您的问题:是的,您应该让 IoC 容器处理其对象的生存期。

也许这个答案可能对你有所帮助。它包含线程安全、延迟加载的单例的基本模式。

实现双重检查锁定模式非常简单,而且非常简洁且很好的做法。然而,就像@Andrew巴伯所说,不正确地实施它可能会很痛苦。

if(_instance == null)
{
    lock(_myLockObject)
    {
         if(_instance == null)
            _instance = new Something();
    }
}
return _instance;

作为一般规则,对象生存期应始终由 IOC 容器处理。

手动对象生存期处理容易出现开发人员错误、SRP 违规和广泛的 DRY 违规。