Хорошая практика для обработки нескольких файлов конфигурации с DI-фреймворками - PullRequest
4 голосов
/ 11 января 2010

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

Я закончил с:

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

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

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

Спасибо.

Ответы [ 2 ]

4 голосов
/ 11 января 2010

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

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

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

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

НТН

Ник

3 голосов
/ 11 января 2010

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...