2013-06-12 4 views
1

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

Так мои app.config указывает на мой фактический файл AppSettings:

<appSettings configSource="Configs\StaticAppSettings.config"/> 

И во всем коде мы обращающиеся конфигурацию, как, например:

var value = ConfigurationManager.AppSettings["SomeKeyName"]; 

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

Мы планируем сделать что-то вроде этого, как инициализация AppSettings:

ConfigurationManager.AppSettings["SomeKeyName"] = "SomeValue"; 
ConfigurationManager.AppSettings["SomeKeyName2"] = "SomeValue2"; 

В основном только создавать ключи с тем же именем ключа, как файлы имеют в настоящее время, но ключ и значение приходят из БД вместо файлов.

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

Правильно ли это подход или он представляет некоторые оговорки/проблемы, или есть ли другой лучший подход к чтению из БД без изменения кода во всем мире?

ответ

3

Поскольку я не Получать никаких ответов, я в конечном итоге делает POC, чтобы доказать свою точку зрения, ниже приведен фрагмент кода, который проходит через AppSettings и обновлений настроек из БД:

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 

IDictionary<string, string> staticAppSettings = ConfigService.GetStaticAppSettings(); // DB Call to get all settings from DB 

foreach (var setting in staticAppSettings) 
{ 
    if (ConfigurationManager.AppSettings[setting.Key] == null) 
    config.AppSettings.Settings.Add(setting.Key, setting.Value); 
    else 
    ConfigurationManager.AppSettings[setting.Key] = setting.Value; // Update existing 
} 

config.Save(); 
ConfigurationManager.RefreshSection("appSettings"); 
Смежные вопросы