Добри практики за работа с множество конфигурационни файлове с DI frameworks

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

Завърших с:

  1. Създайте единичен клас за стартиране на autofac, за да регистрирате всички зависимости освен обвивките на конфигурационния файл.
  2. Създайте отделно сглобяване (посочено от всички проекти) с интерфейс IConfiguration.
  3. Създайте собствена реализация на IConfiguration за всеки проект.
  4. Зависимости на Bootstrap на подходящото място на всеки проект чрез споделен bootstrapper.
  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

HTH

Ник

person Nicholas Blumhardt    schedule 11.01.2010

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

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

Начинът, по който подходих към проблем, подобен на вашия, е като създадох отделна библиотека, която съдържа специализиран контейнер - това звучи много като вашия подход. Този специализиран контейнер капсулира всички общи конфигурации на зависимости.

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

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

person Mark Seemann    schedule 11.01.2010
comment
Съгласихте се да използвате config за неща, които бихте променили без повторно компилиране. Мисля, че Facilities in Windsor може да помогне тук (доколкото разбирам, те могат да играят същата роля като Autofac Modules чрез групиране на свързани компоненти зад една тясна конфигурационна фасада.) - person Nicholas Blumhardt; 11.01.2010