2

コンパイル済みアセンブリで基本クラス (DataStore) を使用して C# でクラスを実装しようとしています。次のような署名が必要です (RavenDb の実装は関係ありません)。

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

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

ただし、このクラスを呼び出しているオブジェクトは、2 つの文字列を受け取るコンストラクターを想定しています。パラメーターなしのコンストラクターを含まない基本クラスの DataStore に関する警告が表示されます。

これは意味がありません。私が取り組んでいるプロジェクトの API を覗いてみると、別のクラスが私がやろうとしていることを行っており、DataStore クラスから継承するだけで 2 つの文字列をコンストラクタとして取り込んでいます。

これを達成する方法についてのアイデアはありますか?

編集:私は間違いを犯し、2番目のコンストラクターを「プライベート」としてマークし、パブリックにする必要があります。

しようとすると:

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

私はまだ得る:

ReflectionUtil.CreateObject でコンストラクターが見つかりませんでした: RavenDbDataStore。コンストラクターのパラメーターが一致しないか、抽象クラスである可能性があります。パラメーター情報: カウント: 2. パラメーターの種類: System.String、System.String

4

1 に答える 1

5

問題は、2 つのパラメーターを受け取る基本クラスのコンストラクターがマークされprivateていることです。これは、使用できないことを意味します。

単一のパラメーター ( ) を取るコンストラクターのみを使用する必要があり、TimeSpanそれを基本クラスに提供します。

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

他の引数を提供する 2 番目のコンストラクターが必要な場合は、それが可能です。

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

編集に応じて編集:

エラーメッセージ:

パラメーター情報: カウント: 2. パラメーターの種類: System.String、System.String

有効期間ではなく、2 つの文字列を基本クラスに渡す必要があることを示唆しています。

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