Проблемы с извлечением настроек приложения, добавленных во время запуска приложения
Кажется, у меня возникла странная проблема, когда в моем 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"]
,