Рамки, такие как PRISM и MEF, позволяют легко создавать сложные приложения из множества составных компонентов. Одним из распространенных примеров этого является архитектура подключаемого модуля, в которой оболочка приложения может быть рефинансирована с помощью подключаемых компонентов пользовательского интерфейса (например, путем удаления библиотек DLL в каталог Plug-ins
).
Это все хорошо и хорошо, но поскольку Vaccano замечен в Может ли Prism быть модульным при вызове веб-сервисов? существуют обстоятельства, при которых каждому отдельному подключаемому модулю требуется свой собственный набор конфигурации - типичные примеры привязок WCF, но есть много других сценариев (протоколирование, соединения с базой данных и т.д.) с аналогичными потребностями.
Итак, как я вижу, у нас есть следующие опции:
- Вся конфигурация переходит в
App.config
приложения оболочки (что, как упоминает Ваккано, нарушает все преимущества инкапсуляции и развертывания этой модели) или - Каждый подключаемый модуль использует специальный механизм для конфигурации (например, встроенный ресурс), а затем использует его для динамической настройки службы WCF, например (которая в лучшем случае беспорядочна и требует много времени, а в худшем случае может быть невозможна )
Ни один из этих вариантов не идеален, но это обходные пути. Тем не менее, идеальная ситуация для каждой подключаемой DLL-версии должна иметь либо автономную конфигурацию (например, встроенный файл ресурсов), либо файл Xxx.dll.config
, и каждый из этих фрагментов XML-конфигурации объединяется в конфигурацию App.config
приложение оболочки динамически во время выполнения. Это напоминает способ объединения файлов Machine.config
и App.config
.
Таким образом, мой вопрос: кто-нибудь сталкивается с любыми существующими инфраструктурами или методами, которые могут быть использованы для обеспечения возможности динамического объединения составных конфигурационных файлов в конфигурацию контейнера в процессе? Я удивлен, не увидев это как часть PRISM или MEF, и поэтому немного опасаюсь опубликовать этот вопрос, если я пропустил что-то очевидное - если да, просто спокойно разместите соответствующую ссылку:)