Мне было дано задание написать техническую спецификацию (и позже внедрить) систему, которая будет построена на нескольких подмодулях.Подмодули будут разрабатываться частично параллельно, поэтому я бы очень хотел избежать перезапуска всей системы при каждом добавлении или обновлении плагина.Поскольку я уже использовал Simple Injector в другом проекте, я планирую использовать его для IoC в каждом подмодуле.Вместо того, чтобы вводить MEF (Managed Extensibility Framework) или MAF (Managed AddIn Framework) в ядро, связывающее модули вместе, я планирую посмотреть, можно ли использовать Simple Injector для обработки модулей.
Мой планиспользовать FileSystemWatcher для просмотра каталога плагинов, и когда обнаруживается изменение, либо используйте Simple Injector, либо, возможно, примените мое собственное решение.Я прочитал обсуждение здесь , но я считаю, что мой вариант использования отличается.
Требования:
- Основная система работает как служба Windows и перезапускает все этовремени следует избегать
- Каждый модуль отвечает за внутреннюю организацию работы, которую необходимо выполнить (что может быть много, поэтому необходимо не перезапускать все)
- Вся системана основе событий.Модули будут отправлять события на шину событий, чтобы другие модули могли реагировать (делать свое дело) в зависимости от события.Модулям, однако, также будет разрешено делать что-то на регулярной основе.Один модуль Fx прослушивает новые файлы в каталоге, анализирует файл и помещает данные в базу данных.Другим модулям может потребоваться что-то сделать на основе этих новых данных.Другой модуль выполняет некоторые периодические вычисления.
- Все модули будут иметь общий интерфейс IModule, который позволит базовой системе запускать и останавливать (удалять) модуль, возможно, вместе с методом регистрации шины событий, если я смогуНе найти другого способа обойти это
- При перезапуске системы (перезапуск fx-сервера) ядро, конечно, должно быть в состоянии поднять все существующие модули
Чтобы иметь возможность динамическизагрузка / перезагрузка сборок Я планирую запустить каждый модуль в отдельном домене приложений.
Возможно ли это с помощью простого инжектора?Есть еще мысли?Возможно, что-то, о чем я не думал.