Рекомендации по работе с несколькими файлами конфигурации с помощью DI-фреймворков

В моем текущем решении у меня есть 18 проектов, и у большинства из них есть свои собственные файлы конфигурации (app.config или web.config). В каждом проекте используется одна общая сборка BLL. Я использую Autofac для обработки зависимостей, но у меня нет достойного способа управления моей конфигурацией. Записи конфигурации примерно одинаковы, но значения разные. В некоторых проектах используются настраиваемые разделы конфигурации, а в некоторых нет.

Я закончил с:

  1. Создайте один класс загрузчика autofac для регистрации всех зависимостей, кроме оболочек файла конфигурации.
  2. Создайте отдельную сборку (на которую ссылаются все проекты) с интерфейсом IConfiguration.
  3. Создайте собственную реализацию IConfiguration для каждого проекта.
  4. Зависимости начальной загрузки в соответствующем месте каждого проекта через общий загрузчик.
  5. Зарегистрируйте собственную имплементацию IConfiguration проекта отдельно после начальной регистрации.

Я очень новичок в Autofac и DI в целом и стремлюсь найти хороший баланс между сложностью и расширяемостью.

Существуют ли более эффективные способы управления файлами конфигурации?

Спасибо.


person Valentin V    schedule 11.01.2010    source источник


Ответы (2)


В Autofac для этой цели используются модули. Группы связанных компонентов инкапсулированы в модуль, который настраивается программным API.

XML-конфигурация Autofac поддерживает модули, поэтому, если вы решили использовать один из них в приложении, вы можете зарегистрировать модуль (а не все содержащиеся в нем компоненты) в файле конфигурации.

Модули поддерживают параметры, которые могут быть переданы компонентам внутри, например. строки подключения, URI и т. д.

Документация здесь поможет вам начать работу: http://code.google.com/p/autofac/wiki/StructuringWithModules

ХТН

Ник

person Nicholas Blumhardt    schedule 11.01.2010

Как правило, я помещаю конфигурацию зависимостей в файлы .config только в том случае, если они представляют что-то, что я хочу изменить без перекомпиляции приложения. По умолчанию у меня нет таких конфигураций.

Я (пока) не знаю об AutoFac, но в Castle Windsor вы можете смешивать .config и программную конфигурацию контейнера, что я обычно и делаю: у меня есть несколько зависимостей, настроенных в .config, потому что я хочу иметь возможность изменить их без перекомпиляции, а остальное прописано в коде (часто по соглашению).

Я подошел к проблеме, похожей на вашу, создав отдельную библиотеку, содержащую специализированный контейнер — это очень похоже на ваш подход. Этот специализированный контейнер инкапсулирует всю общую конфигурацию зависимостей.

В каждом приложении у меня есть еще более специализированный контейнер, который является производным от общего контейнера и переопределяет любую конфигурацию, которую ему необходимо переопределить.

Насколько я понимаю ваше описание, этот подход кажется не слишком далеким от вашего, но сделайте себе одолжение и переместите как можно больше конфигурации из XML в код - на самом деле это становится более управляемым. таким образом.

person Mark Seemann    schedule 11.01.2010
comment
Согласен использовать конфигурацию для вещей, которые вы бы изменили без перекомпиляции. Я думаю, что здесь могут помочь средства в Виндзоре (насколько я понимаю, они могут играть ту же роль, что и модули Autofac, группируя связанные компоненты за одним узким фасадом конфигурации). - person Nicholas Blumhardt; 11.01.2010