0

我似乎遇到了一个奇怪的问题,在我的 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);
4

1 回答 1

3

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

  • 当您使用WebConfigurationManager.AppSettings["someKey"]它时,将返回对应someKeyappSettingsweb.config 部分的值。
  • 当您使用Application["someKey"]它时,将返回一个缓存在应用程序实例中的值。

两者完全不相关,您不能期望读取存储在Application["someKey"]with中的值WebConfigurationManager.AppSettings["someKey"]

于 2009-10-17T13:32:46.527 回答