向dll添加表单时出现null异常

时间:2013-09-06 14:30:51

标签: c# winforms interface

我有一个简单的dll。我使用'interface'将我的dll加载到我的主应用程序中。问题是我想要dll有表单,所以我在dll项目中添加了一个新表单。但每当我将我的DLL加载到主应用程序并尝试调用任何方法时,我得到:null异常:

   ..
   Type[] pluginTypes = Assembly.LoadFile(s).GetTypes();

   foreach (Type t in pluginTypes){
     M.ModuleInterface module = Activator.CreateInstance(t) as M.ModuleInterface;
     module.ReadAll(); // exception
   }

   // Exception I'm getting
   t.GenericParameterAttributes' threw an exception of type 'System.InvalidOperationException'

如果我从dll中删除表单,则异常消失并且一切正常。如何添加表单并修复此异常?谢谢!

3 个答案:

答案 0 :(得分:3)

这可能是因为并非您的dll中的所有类型都实现了ModuleInterface接口。

试试这个:

Type[] pluginTypes = Assembly.LoadFile(s).GetTypes();

foreach (Type t in pluginTypes)
{
    if(t.GetInterfaces().Contains(typeof(ModuleInterface)))
    {
        var module = (ModuleInterface)Activator.CreateInstance(t);
        module.ReadAll(); // exception
    }
}

答案 1 :(得分:0)

我认为这是因为你没有在dll方法中初始化表单。尝试将表单作为参数传递。

答案 2 :(得分:0)

在循环之前,您应该过滤所需类型的所有元素:

foreach(Type t in pluginTypes.Where(type=>typeof(M.ModuleInterface).IsAssignableFrom(type))){
   M.ModuleInterface module = Activator.CreateInstance(t) as M.ModuleInterface;
   module.ReadAll();
}