避免使用公共构造函数C#

避免使用公共构造函数C#,c#,C#,我刚刚创建了某种类型的通用存储库,它似乎正在工作,我唯一的问题是,是否有任何解决方案可以避免在必须实例化到存储库的类中使用公共构造函数 我的代码在这里: public sealed class repository { private static readonly object _lock = new object(); private static readonly object _syncroot = new object(); private static v

我刚刚创建了某种类型的通用存储库,它似乎正在工作,我唯一的问题是,是否有任何解决方案可以避免在必须实例化到存储库的类中使用公共构造函数

我的代码在这里:

public sealed class repository
{
    private static readonly object _lock = new object();

    private static readonly object _syncroot = new object();

    private static volatile repository _instance;

    private static readonly Dictionary<int, object> _dict
        = new Dictionary<int, object>();

    private repository()
    {
    }

    public static repository instance
    {
        get
        {
            if (_instance == null)
            {
                lock (_lock)
                {
                    if (_instance == null) _instance = new repository();
                }
            }
            return _instance;
        }
    }

    public void allocate<Tc>(int id, object constructor_param) where Tc : Irepository<Tc>, new()
    {
        lock (_syncroot)
        {
            if (!_dict.ContainsKey(id))
            {
                var n = new Tc();
                _dict.Add(id, n.New(constructor_param));
            }
        }
    }

    public T get<T>(int id)
    {
        lock (_syncroot)
        {
            return (T) _dict[id];
        }
    }
}

public interface Irepository<out T>
{
    T New(object constructor_param);
}

public class RpSupportedClass : Irepository<RpSupportedClass>
{
    public object _constructor_param;

    private RpSupportedClass(object constructor_param)
    {
        _constructor_param = constructor_param;
    }

    public RpSupportedClass()
    {
    }

    public RpSupportedClass New(object constructor_param)
    {
        return new RpSupportedClass(constructor_param);
    }
}
…因为类型参数。我需要这样的类型参数,因为我有时希望在类实例化中使用参数

有什么出路吗


谢谢大家!

除此之外,这些真的是你用的名字吗?我强烈建议您遵循.NET命名约定。“有什么办法吗?”。不
new()
约束意味着它是一个需求。如果你想隐藏你的公共构造函数,你需要重新考虑你的设计。
    public RpSupportedClass()
    {
    }