我通过反射以动态方式加载.NET程序集,并且获取它包含的所有类(目前为1)。在此之后,我试图将类强制转换为我100%确定该类实现的接口但是我收到此异常:无法将System.RuntimeType类型的对象强制转换为MyInterface类型
MYDLL.DLL
public interface MyInterface
{
void MyMethod();
}
MyOtherDLL.dll
public class MyClass : MyInterface
{
public void MyMethod()
{
...
}
}
public class MyLoader
{
Assembly myAssembly = Assembly.LoadFile("MyDLL.dll");
IEnumerable<Type> types = extension.GetTypes().Where(x => x.IsClass);
foreach (Type type in types)
{
((MyInterface)type).MyMethod();
}
}
我已经删除了所有不必要的代码。这基本上就是我做的。我在this的问题中看到安迪回答的问题似乎与我的问题相同,但无论如何我都无法解决。
答案 0 :(得分:3)
您正在尝试将类型为Type
的.NET框架对象强制转换为您创建的接口。 Type
对象未实现您的界面,因此无法强制转换。您应该首先创建对象的特定实例,例如通过使用Activator
这样:
// this goes inside your for loop
MyInterface myInterface = (MyInterface)Activator.CreateInstance(type, false);
myInterface.MyMethod();
CreateInstance
方法还有其他可能符合您需求的环境。