Проблемы с извлечением настроек приложения, добавленных во время запуска приложения

Кажется, у меня возникла странная проблема, когда в моем global.asax в моем Application_Start() у меня есть что-то, что отправляется в мою базу данных, получает все настройки моего приложения из таблицы имя / значение, а затем сбрасывает их в приложение через 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"]; }
}

Здесь вещи становятся странными.

Если я вызову фасад приложения из моего веб-слоя с этим:

<%= ApplicationFacade.WebServiceUsername %>

Я ничего не получаю обратно (да, я пробовал только ConfigurationManager в методе get!).

Но это странная вещь...

Если я вручную добавлю ключ приложения в мой файл 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 ответ

Решение

В Application_Start когда вы ссылаетесь на Application объект это на самом деле является экземпляром HttpApplicationState, который используется для хранения специфических настроек приложения в памяти и не имеет ничего общего с ключом / значением appSettings, хранящимся в web.config.

  • Когда вы используете WebConfigurationManager.AppSettings["someKey"] это вернет значение, соответствующее someKey в appSettings раздел web.config.
  • Когда вы используете Application["someKey"] это вернет значение, кэшированное в экземпляре приложения.

Оба совершенно не связаны, и вы не можете ожидать, чтобы прочитать значения, хранящиеся в Application["someKey"] с WebConfigurationManager.AppSettings["someKey"],

Другие вопросы по тегам