Проблема
Я работаю над проектом с системой, подобной плагину. Структура проекта определяется следующим образом:
- Solution
- Project A (Cli)
- Project B (Core logic)
- Project C (Plugin)
Project A
- это стартовый проект, Project B
содержит основные логи c, а Project C
- это плагин, который реализует интерфейс в * 1009. *. Project A
имеет ссылку только на Project B
, а Project C
имеет ссылку только на Project B
.
Для визуализации:
Поскольку я не ссылаюсь на Project C
из Project B
(и не создаю экземпляр класса напрямую), код, подобный AppDomain.CurrentDomain.GetAssemblies()
(внутри Project B
), не делает , а не возвращает Project C
.
Однако, как только я это сделаю (из Project B
): var MyImplementation = new MyImplementation()
, AppDomain.CurrentDomain.GetAssemblies()
возвращает сборку, так как она известна и загружена во время выполнения, когда я создал экземпляр класса MyImplementation
явно из кода.
Вопрос
Из Project B
я хочу получить все сборки, которые реализуют указанный c интерфейс, из Project B
и создать их экземпляр.
Итак, как мне загрузить эти (казалось бы) неизвестные сборки во время выполнения?