c# - 如何制作通用单例基类 C#

标签 c# generics singleton

<分区>

我正在尝试创建一个通用的单例基类,例如

public class SingletonBase<T> where T : class, new()
{
    private static object lockingObject = new object();
    private static T singleTonObject;
    protected SingletonBase()
    {

    }

    public static T Instance
    {
        get
        {
            return InstanceCreation();
        }
    }
    public static T InstanceCreation()
    {
        if(singleTonObject == null)
        {
             lock (lockingObject)
             {
                  if(singleTonObject == null)
                  {
                       singleTonObject = new T();
                  }
             }
        }
        return singleTonObject;
    }
}

但我必须在派生构造函数中将构造函数设为公共(public)。

public class Test : SingletonBase<Test>
{
    public void A()
    {

    }
    private Test()
        : base()
    { }
}

编译错误:

'Test' must be a non-abstract type with a public parameterless constructor in order to use it as parameter 'T' in the generic type or method 'Test'

我怎样才能做到这一点?

最佳答案

问题是您的通用约束 where T : class, new()new() 约束需要 T 上的公共(public)无参数构造函数。没有办法解决这个问题;您需要在 Permission Controller 中提供这样的构造函数。

关于c# - 如何制作通用单例基类 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15607454/

相关文章:

c# - 使用 Azure SignalR 向特定用户发送消息

c# - 如何在 <img> src 标签中连接两个字符串?

c# - 在 C# 中使用 `where T : SOMETHING` 结构

c# - C# 通用委托(delegate)的 C++ 等效语法,以及与 lambda 的用法

java - javax.inject.Singleton 和 javax.ejb.Singleton 的区别

c# - 表达式树可能不包含在 C# Linq 中使用选项参数的调用或调用

arrays - Swift通用数组函数查找不匹配项目的元素的所有索引

multithreading - 带参数的 Kotlin 线程安全 native 惰性单例

python - Python 中的单例对象和复制模块

c# - ASP.NET MVC 帮助程序扩展和关注点分离