从 DLL 实例化的类似乎没有正确实现接口

本文关键字:实现 接口 实例化 DLL | 更新日期: 2023-09-27 18:34:12

我有一个类,我试图通过使用程序集和激活器来实例化,这个类实现了一个接口,但是当我通过检查类是否实现它的条件运行类的实例时,我得到了假。可能是什么问题?

我正在检查实现的代码:

     string className = MyClass;
     Type type = null;
     Assembly assembly = Assembly.LoadFile("@C:''MyDLL", new Evidence(AppDomain.CurrentDomain.Evidence));
     type = assembly.GetType(className);
     object instance = Activator.CreateInstance(type);
     //never makes it past this conditional
     if (!(instance is MyInterface)
     {
     //It always endsup in here, when it shouldn't.
     System.Writeline("ERROR");
     }
     else{
     //This is what needs to happen
     }

MyClass类的代码,它超出了所有这些的范围,并且在MyDLL中

public class MyClass: MyInterface
{
//Contents irrelevent to my problem
}

我不明白为什么这没有通过条件。我会把类实例化错吗?另外要注意的是,在使用程序集/激活器和使用接口方面,我是一个大菜鸟。

从 DLL 实例化的类似乎没有正确实现接口

最可能的原因 - DLL 和您的代码都有自己的 MyInterface 版本。这可能发生,因为

  • 一个人不想花时间为界面想出一个好的唯一名称,
  • 有人决定将接口共享为源而不是通过程序集引用,
  • 不同命名空间中的良好命名接口,您using错误的接口。

您可以直接引用程序集。如果是这样,动态加载的类型将具有相同的名称和命名空间,但运行时认为这些类型和命名空间不同。