Отражение: объект экземпляра назначен на нуль - PullRequest
0 голосов
/ 06 марта 2019

Прежде всего я хочу объяснить мою цель: Я пытаюсь написать модульное приложение, и поэтому я написал 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);

Чтобы убедиться, что тип, который я пытаюсь создать, не является нулевым, я проверил "ModuleForMainApplicationType". Отладчик показывает следующее:

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

На данный момент я думаю, что это выглядит так, как ожидалось, и тип получился правильно. Проблема заключается в создании экземпляра, потому что это ссылается на ноль, и я не знаю почему. Исключение выдается для последней строки, но проблема вызвана нулевым объектом, на который есть ссылка.

Подходя к моему вопросу: где моя проблема и почему «ModuleForMainApplicationInstance» ссылается на ноль?

...