C# 单例模式

标签 c# singleton

我在很多地方都使用单例模式,有时构造函数什么都不做,有时它只是初始化一些东西。 我想知道是否有一种方法可以设置一个抽象类来稍微减少我的代码重复,即我不需要在每个类中都使用 public static readonly Singleton _Instance = new Singleton();,只有一个基类。 我了解接口(interface)不是一种选择。

我试过使用以下内容(取自 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; }
    }
}

问题是我无法在需要初始化的情况下重写构造函数。 我正在尝试做的事情有可能吗?还是我应该继续做我正在做的事情而不用担心基础单例类?

最佳答案

I wondered if there was a way to set up an abstract class to minimise my code repetition a bit

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

Is what I'm trying to do even possible? Or should I just keep doing what I'm doing and not worry about a base singleton class?

您不应该尝试创建基类单例 - 但如果我是您,我会首先尝试停止使用这么多单例。单例模式很容易被过度使用,它无异于一种反模式。看看您是否可以针对依赖注入(inject)进行重构,使用发生的配置只为每个类创建一个实例,但这是配置问题而不是类本身强制执行的问题。

除此之外,涉及单例的单元测试往往很痛苦,仅仅是因为它是全局状态,需要在测试之间清理等等。

关于C# 单例模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21847535/

相关文章:

c# - 使用 xdocument 创建 xml

objective-c - Facebook 连接类与单例 : Access token issue

perl - 使用 n-gleton 模式表示(并导出)n 个独特的事物?

ios - 对对象的类方法实例上的运行方法的困惑

c# - 从另一个类的捕获中优雅地返回到 .aspx.cs 文件

c# - 使用 Visual Studio 2010 和 HG 进行版本控制

c++ - 继承和对象的单例或静态数组

java - 不可变单例类的一个好的用例是什么?

c# - 如何记住登录表单的用户名或密码

c# - Entity Framework Core 3.1 从存储过程返回值 (int)