У меня появляется странная проблема, когда в моем приложении global.asax в моем приложении Application_Start() у меня есть что-то, что уходит в мою базу данных, получает все настройки моего приложения от имени/value, а затем помещает их в приложение через 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"]; }
}
Это то, где все становится странно ,
Если я позвоню фасад приложения из моего веб-слоя с этим: (! Да, я попытался просто ConfigurationManager в методе GET)
<%= ApplicationFacade.WebServiceUsername %>
я ничего не получаю обратно.
Но это странно ...
Если я вручную поместить ключ приложения в мой файл 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);
Дарин, благодарю вас за это. Сейчас я чувствую себя немного глупо. Однако как я могу получить доступ к объекту приложения за пределами веб-проекта? –
Вы не можете. Объект Application представляет экземпляр вашего веб-приложения, который, вероятно, живет внутри некоторого пула приложений в IIS, поэтому он доступен только из самого приложения. AFAIK различные приложения/процессы не смогут читать/записывать на этот объект. –
Спасибо, что установили мою тупость прямо! Я исправил его с помощью команды ConfigurationManager.AppSettings.Set (appConfig.ConfigName, appConfig.ConfigValue); ' –