我们现有的控制台应用程序目前使用基于文件的AppSettings。
所以我的app.config指向我的实际appsettings文件:
<appSettings configSource="Configs\StaticAppSettings.config"/>
在整个代码中,我们正在访问配置:
var value = ConfigurationManager.AppSettings["SomeKeyName"];
展望未来我们希望appSettings位于Database.So中。如果我们想保留相同的代码库并且只是修改我们初始化appsettings的方式,那么这将是正确的方法吗?
我们计划像appSettings的初始化那样做这样的事情:
ConfigurationManager.AppSettings["SomeKeyName"] = "SomeValue";
ConfigurationManager.AppSettings["SomeKeyName2"] = "SomeValue2";
基本上只创建与文件当前具有相同键名的键,但键和值来自DB而不是文件。
这样我们的代码库仍然保持不变,现在所有appSettings都是从DB而不是文件初始化的。
这是一种正确的方法,还是提出了一些警告/问题,还是有另一种更好的方法从数据库中读取而无需在任何地方更改代码?
答案 0 :(得分:4)
由于我没有收到任何答案,我最终做了一个POC来证明我的观点,下面是通过应用程序设置和更新DB设置的代码片段:
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");