Страницы

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

понедельник, 4 февраля 2019 г.

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

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


Ответ

Конечно возможно! // Получаем все 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, ...); }

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

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