Страницы

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

воскресенье, 5 января 2020 г.

Загрузка библиотек из массива

#c_sharp #массивы #библиотеки


Есть некая программа для которой пользователи пишут расширения (библиотеки) и в каждой
библиотеки стартовым методом является функция "Start()" с одинаковыми параметрами.
Так вот вопрос, как можно подгрузить библиотеки из массива и вызвать их стартовый метод,
если это возможно?    


Ответы

Ответ 1



Конечно возможно! // Получаем все dll FileInfo[] files = new DirectoryInfo("Директория с нашими плагинами").GetFiles("*.dll"); foreach (FileInfo fi in files) { // Получаем assemly из файла var assembly = Assembly.LoadFile(fi.FullName); // Ищем нужный тип foreach (Type type in assembly.GetTypes()) { ... // Нашли => Создаем экземпляр. Вместо многоточия идут параметры конструктора return Activator.CreateInstance(type, ...); } } Обычно, когда подобное реализуют, то описывают интерфейс, а в библиотеках описывают классы, которые его реализуют. В Вашем случае он будет выглядеть например так: public interace IMyInterface { void Start(...); } И тогда можно перебрать в библиотеке классы, реализующие его: // Ищем нужный тип foreach (Type type in assembly.GetTypes()) { // Проверяем является реализует ли тип type наш интерфейс if (!typeof (IMyInterface).IsAssignableFrom(type)) continue; ... // Нашли => Создаем экземпляр. Вместо многоточия идут параметры конструктора return Activator.CreateInstance(type, ...); }

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

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