Стратегии доступа к нескольким проектам App.config

#c# #.net-3.5

#c# #.net-3.5

Вопрос:

В моем текущем решении есть 3 проекта с 2 app.config (один для общих настроек, а другой для настроек службы). На данный момент я просто создаю статические классы, которые выступают в качестве посредника для доступа к значениям. Я делаю это, чтобы мне не приходилось писать ConfigurationManager.AppSettings["SomeKey"] везде. Это работает нормально, пока вы не захотите получить доступ к файлу app.config из другого проекта.

Вот что я сейчас делаю (все свойства опущены для краткости).

 public class ServiceConfiguration
{
    public static readonly string SyncEvery = ConfigurationManager.AppSettings["SyncEveryMinutes"];
}
  

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

Комментарии:

1. Я не вижу, как ServiceConfiguration. FindKeyValue(ключ) лучше, чем Configurationmanager . Настройки приложений [ключ]? Что вы получаете?

2. Плохой пример. На самом деле у меня есть переопределение T FindKeyValue<T>(string key) , которое позволяет мне извлекать значения, отличные от string .

Ответ №1:

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

Предоставьте класс, который предоставляет настроенные значения проекта в качестве свойств, и получите к ним доступ из класса-потребителя.

 public class FirstProjectClass 
{
  public static int SyncEveryMinutes
  {
      get { return (int)ConfigurationManager.AppSetting["SyncEveryMinutes"] };
  }
}


public class SecondProjectClass
{
  public void ShowConfigedValue()
  {
      Console.Writeline("Syncing every {0} minutes", FirstProjectClass.SyncEveryMinutes);
  }
}
  

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

Ответ №2:

ConfigurationManager.Настройка OpenExeConfiguration может быть полезной: http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.openexeconfiguration.aspx

Также: что сказал Джейсон — обычно это плохая идея.