检索在应用程序启动期间添加的appsetting的问题

时间:2009-10-17 13:20:47

标签: c# asp.net appsettings facade

我似乎有一个奇怪的问题,在我的Application.Start()中的global.asax中,我有一些内容到我的数据库,从名称/值表获取我的所有应用程序设置,然后删除他们通过Application.Add(name,value)进入申请。

我在另一个项目中有一个'应用程序外观',我的服务层,数据层等使用它来获取我需要做的各种各样的设置。

在我的数据库中,我有几个条目:

ConfigName          |  ConfigValue
WebServiceUsername  |  myUsername
WebServicePassword  |  myPassword

所以在我的方法中,我离开并从数据库中获取这些值,并将它们放入我的应用程序中:

protected void GetApplicationSettings()
{
  //Get all the config values out of the database, and then put them into the application keys...
  var appConfigAttributes = ApplicationConfigurationService.GetAppConfigNames();

  foreach (var appConfig in appConfigAttributes)
  {
    Application.Add(appConfig.ConfigName,appConfig.ConfigValue);
  }
}

这是我稍后从应用程序调用值的方式:

public static string WebServiceUsername
{
  get { return WebConfigurationManager.AppSettings["WebServiceUsername"]; }
}

这就是事情变得奇怪的地方。

如果我用我的web层调用应用程序外观:

<%= ApplicationFacade.WebServiceUsername %>

我什么也得不回来(是的,我在get方法中只试过了ConfigurationManager!)。

但这是奇怪的事情......

如果我手动将应用程序密钥放入我的web.config文件中......

<appSettings>
  <add key="putz" value="mash"/>
</appSettings>

然后在我的ApplicationFacade类中使用Putz构建一个类似的属性,当我在视图(<%= ApplicationFacade.Putz %>)中进行调用时,我得到'mash'返回。

所以,我知道我的ApplicationFacade工作正常。也许这是我在application_start()中的代码?

好吧,如果我把它放在我的视图中<%=Application["WebServiceUsername"]%>,则会返回myUsername

是什么给了什么?!

答案

ConfigurationManager.AppSettings.Set(appConfig.ConfigName,appConfig.ConfigValue);

1 个答案:

答案 0 :(得分:3)

Application_Start引用Application对象时,这实际上是HttpApplicationState的一个实例,用于在内存中保存应用程序特定设置,与键/值无关appSettings存储在web.config中。

  • 当您使用WebConfigurationManager.AppSettings["someKey"]时,这将返回与web.config的someKey部分中的appSettings对应的值。
  • 使用Application["someKey"]时,将返回应用程序实例中缓存的值。

两者完全无关,您不能指望使用Application["someKey"]读取存储在WebConfigurationManager.AppSettings["someKey"]中的值。