Как вызвать функцию в .net DLL через интерфейс, загруженный через отражение - PullRequest
3 голосов
/ 20 октября 2010

Здравствуйте, я сделаю все возможное, чтобы объяснить это.

По сути, я загружаю библиотеку через отражение с использованием Assembly.LoadFile.

Оттуда у меня есть интерфейс IFace, который определяетметод "GetStrings", который возвращает массив строк.

Динамически загружаемая DLL имеет класс с именем "Class1", который реализует IFace.

Мне нужен способ вызова этого интерфейсного метода черездинамически загружаемая библиотекаЯ хотел бы держать это тесно связанным, что заставляет меня задаться вопросом, что делать.Я знаю, что могу использовать MethodInvoker для вызова метода, но я пытаюсь найти способ сделать что-то вроде этого:

IFace obj = (IFace)ReflectionAssembly.Class1;
string[] strs = obj.GetStrings();

Есть идеи?

Ответы [ 3 ]

6 голосов
/ 20 октября 2010

Что-то вроде:

    var assm = Assembly.Load("ClassLibrary1");
    var type = assm.GetType("ClassLibrary1.Class1");
    var instance = Activator.CreateInstance(type) as IFace;
    string[] strings = instance.GetStrings();
2 голосов
/ 20 октября 2010

Используйте Assembly.CreateInstance () для создания объекта, передайте ему «хорошо известное имя». Приведите возвращаемое значение к IFace, остальное легко. О, не используйте LoadFile, используйте LoadFrom.

1 голос
/ 20 октября 2010

Если у вас есть тип через отражение (используется что-то вроде Assembly.GetType ), вы можете использовать Activator.CreateInstance :

IFace obj = (IFace)Activator.CreateInstance(class1Type);
string[] strs = obj.GetStrings();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...