2

我们有一个现有的控制台应用程序,它当前使用基于文件的 AppSettings。

所以我的 app.config 指向我的实际 appsettings 文件:

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

在整个代码中,我们正在访问这样的配置:

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

展望未来,我们希望 appSettings 位于数据库中。因此,如果我们想保持相同的代码库并仅修改初始化 appsettings 的方式,那将是正确的方法吗?

我们计划做这样的事情作为 appSettings 的初始化:

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

基本上只需创建与文件当前具有相同键名的键,但键和值来自数据库而不是文件。

这样我们的代码库仍然保持不变,所有的 appSettings 现在都是从数据库而不是文件初始化的。

这是一种正确的方法还是它提出了一些警告/问题,或者是否有另一种更好的方法可以从数据库中读取而无需在任何地方更改代码?

4

1 回答 1

4

由于我没有收到任何答案,我最终做了一个 POC 来证明我的观点,下面是一段通过 appsettings 并从 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");
于 2013-06-19T18:22:35.327 回答