C#Singleton模式

时间:2014-02-18 08:03:50

标签: c# singleton

我在很多地方使用单例模式,有时候构造函数什么都不做,有时候它会初始化。 我想知道是否有办法设置一个抽象类来最小化我的代码重复,即我在每个类中只需要public static readonly Singleton _Instance = new Singleton();,只需要一个基类。 我理解界面不是一种选择。

我尝试过使用以下内容(摘自here);

public abstract class Singleton<T> where T : new()
{
    static Singleton()
    {
    }

    private static readonly T _Instance = new T();

    public static T Instance
    {
        get { return _Instance; }
    }
}

这个问题是我无法覆盖我需要初始化事物的情况的构造函数。 我正在努力做甚么可能吗?或者我应该继续做我正在做的事情,而不是担心基础单身人士课程?

1 个答案:

答案 0 :(得分:8)

  

我想知道是否有办法设置一个抽象类来最小化我的代码重复

不,没有。只要你有一个抽象类,你就有了一个可以多次实例化的类。我已经看到不同的人尝试做这样的事情,但最终的结果要么不是单身,要么比做你已经做过的事情更复杂。

  

我尝试做的甚至可能吗?或者我应该继续做我正在做的事情,而不是担心基础单身人士课程?

你不应该尝试创建一个基础单身人士课程 - 但如果我是你,我会尝试首先停止使用这么多的单身人士。单例模式很容易被过度使用,它等同于反模式。看看你是否可以重构依赖注入,使用发生的配置来创建每个类的一个实例,但这需要配置而不是由类本身强制执行。

除此之外,涉及单身人士的单元测试往往是一种痛苦,仅仅因为它需要在测试之间进行清理等全球状态。