Страницы

Поиск по вопросам

вторник, 30 октября 2018 г.

Подключение DLL расположенную на сервере в свою программу C#

Возникла потребность вынести часть кода на сервер в виде библиотеки DLL. Задача скачать DLL в память, и из памяти использовать методы DLL. По своей задаче нашёл один ответ, но как вызвать свой метод мне не понятно.
WebClient webClient = new WebClient(); byte[] assemblyBytes = webClient.DownloadData("https://mysite.com"); var assembly = Assembly.Load(assemblyBytes); var types = assembly.DefinedTypes;
Как вызвать методы DLL скачанной в память ? К примеру DLL написан на C# и имеет такою структуру.
class myClass { public static int GetSum(int arg) { return arg; }
public static int GetNum(int arg) { return arg; }
public static int GetId(int arg) { return arg; } }


Ответ

Пример вызова статического метода:
var type = assembly.GetType("Namespace.TypeName"); var method = type.GetMethod("StaticMethod"); var result = method.Invoke(null, new object[] { param1, param2 });
Но лучше всего будет задать некий интерфейс/базовый класс в вашей программе, а класс в скачиваемой длл должен реализовать интерфейс/наследовать класс. Например вот так:
// интерфейс в вашей программе public interface IRemote { int DoSomething(string param1, int param2); }
// его реализация в скачиваемой длл, она должна иметь референс на вашу программу public class RemoteClass : IRemote { public int DoSomething(string param1, int param2) { Console.WriteLine(param1); } }
И дальше вы делаете так:
var type = assembly.GetType("Namespace.RemoteClass"); var remote = (IRemote)Activator.CreateInstance(type); remote.DoSomething("qwerty", 100);
Преимущества этого подхода в том, что вам не нужно каждый метод получать при помощи GetMethod, и исключаются ошибки, когда передаются неправильные параметры при вызове MethodInfo.Invoke

Комментариев нет:

Отправить комментарий