C#Singleton模式

Tre*_*ent 3 c# singleton

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

我尝试过使用以下内容(取自此处);

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

    private static readonly T _Instance = new T();

    public static T Instance
    {
        get { return _Instance; }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 8

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

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

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

你不应该尝试创建一个基础单例类 - 但如果我是你,我会尝试首先停止使用这么多的单例.单例模式很容易被过度使用,这无异于反模式.看看你是否可以重构依赖注入,使用恰好只创建每个类的一个实例的配置,但这是配置问题而不是类本身强制执行.

除了其他任何事情,涉及单身人士的单元测试往往是一种痛苦,仅仅因为它是需要在测试之间进行清理的全局状态等.