#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, ...); }
Комментариев нет:
Отправить комментарий