0

我有一个简单的dll。我使用“接口”将我的 dll 加载到我的主应用程序中。问题是我希望 dll 有表单,所以我在 dll 项目中添加了一个新表单。但是每当我将我的 dll 加载到主应用程序中并尝试调用任何方法时,我都会得到:空异常:

   ..
   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 中删除表单,异常就会消失,一切正常。如何添加表单并修复此异常?谢谢!

4

3 回答 3

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
    }
}
于 2013-09-06T14:34:16.567 回答
0

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

于 2013-09-06T14:33:37.903 回答
0

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

foreach(Type t in pluginTypes.Where(type=>typeof(M.ModuleInterface).IsAssignableFrom(type))){
   M.ModuleInterface module = Activator.CreateInstance(t) as M.ModuleInterface;
   module.ReadAll();
}
于 2013-09-06T14:49:54.677 回答