• 53156
  • 29
  • 13
Нравится блог?
Подписывайтесь!

Глобальная переменная в HttpApplication | .NET

Допустим, такой класс веб-приложения (наследованный от HttpApplication):

public class MyHttpApplication : HttpApplication
{
public string MyGlobalVar = String.Empty;
protected void Application_Start()
{
this.MyGlobalVar = "Значение глобальной переменной.";
}
}

Например, в другом участке кода, захочется получить значение глобальной переменной MyGlobalVar такой строкой кода:

string myGlobalVar = ((MyHttpApplication)HttpContext.Current.ApplicationInstance).MyGlobalVar;

В этой строке кода понятно, что мы получаем из текущего контекста запроса экземпляр текущего приложения (HttpApplication), преобразовываем его в экземпляр нашего класса (MyHttpApplication) и нам становится доступна глобальная переменная MyGlobalVar, которую мы проинициализировали на старте приложения (в событии Application_Start).

Переменная будет пустая (т.е. пустая строка, String.Empty).

Идем в MSDN и читаем, почему так. "...Во время запуска приложения можно задать только статические данные. Не задавайте каких-либо данных экземпляра, так как они будут доступны только первому созданному экземпляру класса HttpApplication...".

Понятно, что мы облажались. Если хочешь глобально доступных даных, то делай их статическими. А если нужны-таки данные экземпляра HttpApplication, коих, как известно, может создаваться несколько в одном домене (до 100 штук)?

Тогда можно делать это через переопределение функции Init() у класса HttpApplication:

public class MyHttpApplication : HttpApplication
{
public string MyGlobalVar = String.Empty;
protected override void Init()
{
this.MyGlobalVar = "Значение глобальной переменной.";
}
}

Теперь, при доступе к нашей глобальной переменной из любого участка кода:

string myGlobalVar = ((MyHttpApplication)HttpContext.Current.ApplicationInstance).MyGlobalVar;

Она будет иметь значение "Значение глобальной переменной.".

И всё бы хорошо. Но ничего хорошего. Если, я инициализирую глобальные данные экземпляра HttpApplication из события Application_Start, а потом не могу получить эти данные, то это о чем говорит? О том, что первый экземпляр для меня потерян и я работаю уже в другом экземпляре HttpApplication? Если это так, то какого хрена исполняющая среда ASP.NET всегда стабильно создает два экземпляра HttpApplication при первом запросе?

Чего я не понимаю?

m-r Tarakanoff tarakanoffth
The best C# and .NET days are ahead of us. (25 Mar 2010 by Miguel de Icaza)
11 апреля 2011, 13:49
1343

Загрузка...
Loading...

Комментарии

Путем логирования вызова переопределенной функции Init(), класса HttpApplication, выясняется, что при первоначальном запуске веб-приложения (локальный сервер), она вызывается всего один раз. Значит экземпляр HttpApplication вначале создается только один. Но почему его данные не доступны, если они проинициализированны в событии Application_Start()?

Оставьте свой комментарий

Спасибо за открытие блога в Yvision.kz! Чтобы убедиться в отсутствии спама, все комментарии новых пользователей проходят премодерацию. Соблюдение правил нашей блог-платформы ускорит ваш переход в категорию надежных пользователей, не нуждающихся в премодерации. Обязательно прочтите наши правила по указанной ссылке: Правила

Также можно нажать Ctrl+Enter

Популярные посты

Инструкция для аллергиков. Как бороться с аллергией в период обострения

Инструкция для аллергиков. Как бороться с аллергией в период обострения

Я аллергик с детства. Имею аллергию на пыльцу березы, липы, полыни (выяснил это благодаря кожным пробам), а также пищевую аллергию на горчицу. Свои проблемы знаю, однако это меня не спасло.
Romeo_17
15 авг. 2017 / 17:21
  • 38604
  • 63
СМИ – ассистент провокаторов? Как гости из соседних стран сеют раздор в Казахстане

СМИ – ассистент провокаторов? Как гости из соседних стран сеют раздор в Казахстане

Инцидент с пьяным киргизским гостем на борту Air Astana, наверное, остался бы только во внутренних сводках авиакомпании, если бы г-н Доган, не поднял громкий крик о государственном языке.
openqazaqstan
17 авг. 2017 / 14:43
Алматы предложили сделать центром секс-туризма

Алматы предложили сделать центром секс-туризма

Известный политолог России Андрей Карпов предложил сделать Алматы центром секс-туризма. Но для этого сперва нужно легализовать проституцию в стране.
tala03
13 авг. 2017 / 14:48
Казахский национализм раньше выглядел несовременно. Теперь он другой

Казахский национализм раньше выглядел несовременно. Теперь он другой

Националисты стали совсем другими. По-английски хорошо говорят, русскую классику цитируют. Очень современные, образованные, адекватные. А после Крыма в националисты уже чуть ли не любой казах готов был записаться.
Aidan_Karibzhanov
16 авг. 2017 / 16:52
«Доехать до Алтын Орды» – как мошенники обманывают алматинцев

«Доехать до Алтын Орды» – как мошенники обманывают алматинцев

Из множества грустных откровений постепенно сложился перечень самых распространённых уловок охотников за нашими деньгами. В нём ожидаемо лидировали профессиональные попрошайки.
caravan_kz
16 авг. 2017 / 15:05
  • 1914
  • 2
В Кокшетау строят два парка для молодёжи. Будут учтены интересы и любителей спорта

В Кокшетау строят два парка для молодёжи. Будут учтены интересы и любителей спорта

Общая площадь парка составляет 25 гектаров. На территории предусмотрено устройство прогулочных дорожек, площадок для установки аттракционов и павильонов различного назначения, цветников.
zhasakmola
17 авг. 2017 / 17:13
  • 1744
  • 1
Имеющий уши да услышит. Латиница касается только казахского языка

Имеющий уши да услышит. Латиница касается только казахского языка

Президент Назарбаев наконец-то разъяснил для всех, кто ещё не понял, очевидный вопрос, который всем в Казахстане очевиден. Елбасы повторил: на латиницу мы переводим казахский язык, и это не означает отказ от русского языка.
openqazaqstan
вчера / 16:23
  • 1679
  • 39
Недоразумение с грантами в ВУЗы: «медалисты» до сих пор имеют преимущество

Недоразумение с грантами в ВУЗы: «медалисты» до сих пор имеют преимущество

Многие способные выпускники без Алтын Белги готовились к тестированию, чтобы в честной борьбе попытать счастья на гранты без ущемления со стороны якобы "золотых" выпускников.
DanaJarlygapova
14 авг. 2017 / 14:35
Новый конкурс на грантовое финансирование – разочарование для казахстанских ученых

Новый конкурс на грантовое финансирование – разочарование для казахстанских ученых

Обсуждение новых условий началось ещё давно, но стоит ли ожидать качественного улучшения результатов научно-исследовательской деятельности, если система управления наукой не была модернизирована?
ermekuss
17 авг. 2017 / 12:23
  • 1508
  • 1