2

我正在尝试在 C# 中使用已编译程序集中的基类(DataStore)实现一个类。它想要这样的签名(RavenDb 的实现不相关):

    public RavenDbDataStore(TimeSpan objectLifetime) : base(objectLifetime)
    {
    }

    public RavenDbDataStore(TimeSpan objectLifetime, bool enableCaching) : base(objectLifetime, enableCaching)
    {
    }

但是,调用此类的对象期望构造函数采用两个字符串。我收到有关基类的警告,DataStore 不包含任何无参数构造函数。

这没有任何意义,看看我正在处理的项目的 API,另一个类正在做我正在尝试做的事情,并在仅从 DataStore 类继承的同时将两个字符串作为构造函数。

关于如何做到这一点的任何想法?

编辑:我犯了一个错误,将第二个构造函数标记为“私有”,它应该是公共的。

尝试时:

公共 RavenDbDataStore(TimeSpan objectLifetime, string param1, string param2) : base(objectLifetime) { }

我仍然得到:

在 ReflectionUtil.CreateObject 中找不到构造函数:RavenDbDataStore。构造函数参数可能不匹配,或者它可能是一个抽象类。参数信息:计数:2。参数类型:System.String、System.String

4

1 回答 1

5

问题是带有两个参数的基类的构造函数被标记private,这意味着你不能使用它。

您只需要使用带有单个参数(the TimeSpan)的构造函数,并将其提供给基类​​:

public YourClass(TimeSpan lifetime) : base(lifetime)
{
}

如果您想要提供其他参数的第二个构造函数,这是可能的:

public YourClass(TimeSpan lifetime, string someOtherParam) : base(lifetime)
{
     // use someOtherParam
}

编辑以响应编辑:

错误信息:

参数信息:计数:2。参数类型:System.String、System.String

建议您需要将两个字符串(但不是生命周期)传递给基类:

public RavenDbDataStore(TimeSpan objectLifetime, string param1, string param2) 
    : base(param1, param2) { }
于 2013-06-07T17:32:44.877 回答