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

D J*_*D J 5 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是我必须将构造函数作为派生的公共构造函数.

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

    }
    private Test()
        : base()
    { }
}
Run Code Online (Sandbox Code Playgroud)

编译错误:

'Test'必须是具有公共无参数构造函数的非抽象类型,以便在泛型类型或方法'Test'中将其用作参数'T'

我怎样才能做到这一点?

Jas*_*ins 6

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