1

それぞれが interface を実装するさまざまなクラス ライブラリがありますIImportCharacter。私のメイン アプリでは、ユーザーが DLL を選択し、アプリはライブラリがインターフェイスを実装しているかどうかを確認し、それを実装するライブラリでクラスをインスタンス化する必要があります。これを行うためにリフレクションを使用しようとしていますが、取得し続けます:

「CustomCharacter.Ogre」タイプのオブジェクトを「MainGame.IImportCharacter」タイプにキャストできません。

Assembly assembly = assemblyPath;
foreach (Type type in assembly.GetTypes())
{
    IImportCharacter instance = null;
    if (type.GetInterface("IImportCharacter") != null)
    {
        //exception thrown at this line
        instance = (IImportCharacter)Activator.CreateInstance(type);
    }
}

同じファイルをメイン プロジェクトにコピーしましたIImportCharacter。そうしないと、コンパイラが何がわからないと文句を言いIImportCharacterます。動的にロードされるのと同じではないため、これが問題を引き起こしている可能性があると思います。どうすればこれを修正できますか?

4

1 に答える 1

3

はい、キャスト先のインターフェースは同じ名前の別のタイプだと思います。IImportCharacter を、自分のコードと読み込んでいるインターフェイスの両方から参照できる共有アセンブリに移動してみませんか?

それ以外の場合は、Convert.ChangeType()動的に読み込まれる型で動的に読み込まれるインターフェイスを使用してみてください。

于 2012-10-01T20:53:34.953 に答える