使用反射实例化类

时间:2012-10-01 20:49:40

标签: c# reflection dll interface .net-assembly

我有不同的类库,每个类都实现一个接口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是什么。我认为这可能导致问题,因为它不是动态加载的那个。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

是的,我认为您要投射的界面是具有相同名称的其他类型。为什么不将IImportCharacter移动到一个共享程序集,您可以从代码和正在加载的代码中引用它,因为它是您的界面?

否则,请尝试在动态加载的类型上使用Convert.ChangeType()和动态加载的接口。