Как бы вы централизовали настройку нескольких проектов? - PullRequest
10 голосов
/ 31 августа 2010

У меня есть решение около 10 проектов с настройкой только для чтения.Это веб-приложения, службы Windows, консольные приложения и т. Д. Все проекты, кроме одного, находятся на одном сервере.Каждый проект имеет 3 среды - dev, test и production.Таким образом, есть 30 различных наборов конфигурации, каждый с приличным количеством настроек.Поддерживать согласованность конфигурации для каждого приложения и среды неудобно.

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

Как бы вы пошли о централизации конфигурации для нескольких проектов?

Ответы [ 3 ]

11 голосов
/ 31 августа 2010

Если вы хотите сохранить стандартный интерфейс конфигурации, взгляните на ProtectedConfigurationProvider .Этот провайдер позволяет хранить ваши данные конфигурации вне стандартного файла конфигурации, шифровать их так, как вам нравится, или перенаправлять запросы на конфигурацию любым удобным для вас способом:

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

2 голосов
/ 31 августа 2010

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

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

Еще одна вещь, которую следует учитывать,однако преимущество .config в .NET заключается в том, что при их изменении приложение может реагировать;Вы можете захотеть иметь службу обратного вызова WCF, которая уведомляет клиентов, если их конфигурация была обновлена ​​на центральном сервере, чтобы они могли запросить новую копию и обновить себя при необходимости.

1 голос
/ 31 августа 2010

Поскольку они (почти) все находятся на одном сервере, вы можете рассмотреть возможность предоставления значений по умолчанию в файлах machine.config и / или центральных web.config. Я обычно не фанат использования / изменения этих файлов, но они есть ... в \Windows\Micsrosoft.NET\Framework<version>\Config\

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