2

次のように、アクティベーション カスタム データを使用してクラスのインスタンスを作成します。

var repo = Activator.CreateInstance(Type.GetType(repoFullName),
                new string[] { connectionString }) as IRepository;

CreateInstance メソッドで文字列配列である 2 番目のパラメーターを渡さない場合、すべて正常に動作しますが、カスタム データ パラメーター メソッドを使用すると、例外がスローされます。

System.MissingMethodException: タイプ 'Namespase.MockRepository' のコンストラクターが見つかりません。

インスタンス化された型のパブリック コンストラクター

public MockRepository(string[] customData) {...}

また

public MockRepository(Object[] customData) {...}

効果は変わりませんでした。私は何を間違っていますか?

4

1 に答える 1

2

コンストラクターの署名を修正する必要があります。これを呼び出す方法では、配列ではなく単一の文字列/オブジェクトを渡すため、これでオブジェクトビューの反映をアクティブにする場合は、一致するコンストラクターを見つけることができません。このように、オブジェクトには呼び出し元のコードに一致するコンストラクターが必要です。オブジェクト配列を使用して引数をアクティブ化に渡す理由は、位置に基づいて複数のパラメーターをコンストラクターに渡すことができるようにするためであり、型は定義と一致する必要があります。

次のコンストラクターがある場合:

public MockRepository(string customData) {...}

正しくインスタンス化する必要があります。これは、コンストラクターにパラメーターを渡さずにインスタンス化することも計画している場合は、パラメーターなしのコンストラクターも定義する必要があると言われています。

于 2012-11-06T18:42:48.467 に答える