反射:实例对象分配为空

时间:2019-03-05 22:01:14

标签: c# reflection dllimport

首先,我想解释一下我的目标: 我正在尝试编写一个模块化应用程序,因此我写了一个MainApplication来加载模块(例如ModulesForMainApplication)。我的目的是即使一个或多个模块不可用,MainApplication仍然可用。因此,我创建了以下项目结构:

我创建了一个包含两个项目的解决方案:

  1. MainApplication
  2. ModuleForMainApplication

在“ ModuleForMainApplication”中,我定义了一个仅返回字符串的测试方法(如下所示)。

public string RetrunSimpleString()
{
    return "!";
}

进一步的信息:“ ModuleForMainApplication”引用了“ MainApplication”,因为我需要使用MainApplication的类(以免双重实现它们)。

在互联网上搜索并适应了我的目标后,我陷入了一个问题。下面显示的代码限制了“ System.MissingMethodException”。使用DLL对我来说是新的,所以我现在不知道是什么导致了此问题。

Assembly ModuleForMainApplicationAssembly = Assembly.LoadFrom(@"\Path\to\dll\MailProtectionComparison.dll");
Type ModuleForMainApplicationType = ModuleForMainApplicationAssembly.GetType("ModuleForMainApplication.Classes.ModuleForMainApplication");
object ModuleForMainApplicationInstance = Activator.CreateInstance(ModuleForMainApplicationType);
string x = (string)ModuleForMainApplicationType.InvokeMember("RetrunSimpleString", BindingFlags.InvokeMethod, null, ModuleForMainApplicationInstance, null);

为确保我尝试实例化的类型不为null,我检查了“ ModuleForMainApplicationType”。调试器显示以下内容:

ModuleForMainApplicationType    {Name = "ModuleForMainApplication" FullName = "ModuleForMainApplication.Classes.ModuleForMainApplication"}  System.Type {System.RuntimeType}

就目前而言,我认为这看起来像预期的那样,类型正确。问题是实例的创建,因为它引用了null,但我不知道为什么。最后一行引发异常,但是问题是由空引用对象引起的。

要问我的问题:我的问题在哪里,为什么“ ModuleForMainApplicationInstance”引用为null?

0 个答案:

没有答案