---
title: "Глобальная переменная в HttpApplication | .NET"
description: "Допустим, такой класс веб-приложения (наследованный от HttpApplication): public class MyHttpApplicat..."
author: "tarakanoffth"
published: "2011-04-11T01:49:59+00:00"
modified: "2011-04-11T01:50:23+00:00"
locale: "ru"
canonical_url: "https://yvision.kz/post/globalnaya-peremennaya-v-httpapplication-net-142854"
markdown_url: "https://yvision.kz/post/globalnaya-peremennaya-v-httpapplication-net-142854/markdown"
site_name: "Yvision.kz"
---

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

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

Допустим, такой класс веб-приложения (наследованный от 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 при первом запросе?

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

---

Source: [https://yvision.kz/post/globalnaya-peremennaya-v-httpapplication-net-142854](https://yvision.kz/post/globalnaya-peremennaya-v-httpapplication-net-142854)