从 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 和您的代码都有自己的 MyInterface
版本。这可能发生,因为
- 一个人不想花时间为界面想出一个好的唯一名称,
- 有人决定将接口共享为源而不是通过程序集引用,
- 不同命名空间中的良好命名接口,您
using
错误的接口。
您可以直接引用程序集。如果是这样,动态加载的类型将具有相同的名称和命名空间,但运行时认为这些类型和命名空间不同。