Как управлять конфигурацией из нескольких библиотек классов в .NET? - PullRequest
3 голосов
/ 04 ноября 2011

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

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

Библиотека классов 1

  • CL1Setting
  • GlobalSetting

Библиотека классов 2

  • CL2Setting
  • GlobalSetting

A Первый подход будет создавать все необходимые настройки в основном проекте:

  • GlobalSetting
  • CL1Setting
  • CL2Setting

Но это создает несколько проблем:

  • Он может быстро загромождаться при большом количестве настроек.
  • Нелегко поддерживать: как узнать, какие настройки необходимы для каждой библиотеки?
  • Может создавать конфликты имен. Что если CL1Setting и CL2Setting будут иметь одинаковые имена?

Идеальным решением для меня (хотя я боюсь, что это невозможно) было бы использование пользовательских настроек библиотеки в отдельных файлах или, по крайней мере, в разных разделах. Примерно так:

<configuration>
  <appSettings>
    <add key="globalSetting" value="cl1Global"/>
  </appSettings>
  <appSettings file="CL1.config" >
    <add key="cl1setting" value="cl1setting1"/>
  </appSettings>
  <appSettings file="CL2.config">
    <add key="cl2setting" value="cl2setting2"/>
  </appSettings>
</configuration>

Есть предложения?

EDIT

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

РЕДАКТИРОВАТЬ 2

Предложение joseph.ferris посмотреть на конструктор разделов конфигурации на CodePlex (csd.codeplex.com) было хорошим. Я обнаружил дополнительные проблемы, о которых сообщалось здесь (на случай, если кто-то заинтересовался) http://csd.codeplex.com/discussions/278354

Ответы [ 3 ]

3 голосов
/ 04 ноября 2011

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

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

1 голос
/ 04 ноября 2011

Вы можете использовать собственное соглашение об именах, чтобы уменьшить риск коллизий имен в appSettings.И / или создавать пользовательские разделы конфигурации.

<configuration>
  <appSettings>
    <add key="Shared.Setting1" value="..."/>

    <add key="CL1.setting1" value="..."/>
    <add key="CL1.setting2" value="..."/>

    <add key="CL2.setting1" value="..."/>
    <add key="CL2.setting2" value="..."/>

  </appSettings>
</configuration>

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

0 голосов
/ 05 октября 2015

Microsoft использует двоеточие в качестве разделителя для пространства имен в некоторых их кодах.Пример их Azure образцов .Здесь они используют ida: в качестве префикса.

ConfigurationManager.AppSettings["ida:ClientId"];

В Microsoft ASP.NET в файле Web.config вы можете увидеть:

<appSettings>
  <add key="webpages:Enabled" value="false" />
</appSettings>
...