Я пытаюсь понять архитектуру для плагинов, но я никогда с этим не работал. По сути, моя программа поддерживает несколько баз данных базы данных, но только по одному.Архитектура плагинов/вопрос о закате зависимости
Моя идея состояла в том, чтобы создать новую сборку («.DataCore»), которая содержит все мои интерфейсы репозитория (IFooRepository, IBarRepository) и интерфейс IDataPlugin. Затем плагины должны реализовать все эти интерфейсы.
Пользователь указывает имя нужной сборки в файле app.config. Моя программа затем вызовет функцию в сборке DataCore, которая, в свою очередь, использует Reflection для загрузки желаемой сборки. Используя отражение, я затем ищу класс, который реализует IDataPlugin и вызывает функцию Initialize(), которая содержит все привязки DI для Ninject.
Так что моя архитектура выглядит следующим образом:
MyProgram => новый DataCoreLoader (строка AssemblyName) => DesiredDataPlugin.Initialize()
я просто не уверен, что это правильный путь , и если я действительно должен реализовать это сам, используя отражение. Я предполагаю, что существуют существующие Frameworks? Я кратко посмотрел на MEF, но не знаю, поможет ли это?
Причины, по которым я хочу, чтобы мои плагины имели по крайней мере один класс обнаружения: a) Я хочу проверить номер протоколаVersion на тот, который ожидает моя программа, определить устаревшие плагины и b) My Configuration Tool должен предложить список все DataPlugins с некоторыми метаданными, такими как Author или Description.
Он никогда не понадобится для загрузки более одного плагина данных одновременно, но я ищу что-то, что позволит это в других областях (в другой части приложения я хочу использовать плагины, которые подписываются к событиям, которые выбрала мое приложение).
Спасибо. Разумеется, это было бы разумно (я действительно склонялся к полному сильному имени), но я все равно хочу отсканировать сборку для классов, реализующих интерфейс. Таким образом, если у меня есть 3 сборки, я могу добавить инструмент «Выбор» в «Конфигурация», чтобы пользователь мог выбрать тот, который ему нужен. –