0

我有一个我试图通过使用 Assembly 和 Activator 实例化的类,这个类实现了一个接口,但是当我通过一个检查类是否实现它的条件来运行类的实例时,我得到了错误。可能是什么问题呢?

我正在检查实现的代码:

     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
}

我不知道为什么这没有通过条件。我可以实例化类错误吗?还要注意的是,在使用 Assembly/Activator 和使用接口方面,我是个大菜鸟。

4

2 回答 2

3

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

  • 不想花时间为界面想出好的唯一名称,
  • 有人决定共享接口作为源而不是通过程序集引用,
  • 不同命名空间中的好命名接口,你using错了。
于 2013-10-07T18:33:33.467 回答
0

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

于 2013-10-07T18:42:25.443 回答