我正在尝试动态加载一些.dll文件.文件是插件(现在是自编写的),它至少有一个实现MyInterface的类.对于每个文件,我正在执行以下操作:
Dictionary<MyInterface,bool> _myList; // ...code Assembly assembly = Assembly.LoadFrom(currentFile.FullName); foreach (Type type in assembly.GetTypes()) { var myI = type.GetInterface("MyInterface"); if(myI != null) { if ((myI.Name == "MyInterface") && !type.IsAbstract) { var p = Activator.CreateInstance(type); _myList.Add((MyInterface)p,true); } } }
运行此操作会导致强制转换异常,但我找不到解决方法.无论如何,我想知道为什么这根本不起作用.我正在寻找.NET Framework 3.5中的解决方案.
发生在我身上的另一件事是在上面的代码中向_myList添加新条目之前运行以下内容后在p中获取null:
var p = type.InvokeMember(null,BindingFlags.CreateInstance,null,null) as MyInterface;
解决方法
你应该真正阅读Jon Skeet的
Plug-ins and cast exceptions,它解释了你看到的行为以及如何正确地进行插件框架.