В дополнение к правильному ответу Дарина, рекомендующему встроенный кеш, заметка о Одиночных в Asp.Net.
MvcApplication НЕ является синглтоном
Вопреки распространенному мнению, MvcApplication НЕ является глобальным синглтоном. Класс создается несколько раз, по одному экземпляру на каждый «конвейер», поэтому счетчик производительности «Количество экземпляров конвейера» сообщает, сколько экземпляров MvcApplication в настоящее время считается живым. Добавьте ctor по умолчанию и докажите это самостоятельно:
public MvcApplication()
{
Trace.WriteLine(this.GetHashCode());
}
Отладка прерывает линию или просматривает различные хэш-коды в DebugViewer. Чтобы принудительно увеличить количество экземпляров конвейера, создайте метод с Thread.Sleep (5000), Asp.Net запустит новый экземпляр, как только вы сделаете другой http-запрос параллельно.
Решение - Как создать синглтоны в приложениях Asp.Net (MVC или WebForms)
Если ваш класс MvcApplication, однако, имеет метод Application_Start (), то этот метод фактически вызывается только один раз, для всего процесса. Это позволяет добавлять статические поля в MvcApplication и получать к ним доступ.
Затем к этим полям обращается
MvcApplication.MySingleValue
HttpApplication странность
Дизайн класса HttpApplication и его событий довольно странный, что, вероятно, имеет свою причину в некоторой слабой обратной совместимости дизайна с очень старыми ASP-страницами на основе COM. Там объект приложения был фактически создан только один раз, что, несомненно, является источником неверного убеждения, связанного с Asp.Net. Пример странности HttpApplication:
protected void Application_Start()
{
}
Обратите внимание, что здесь нет переопределения!
Таким образом, в большинстве случаев экземпляры приложения могут представлять незначительный интерес, и я не вижу ни одного сценария, в котором они могли бы стать релевантными для сохранения состояния, поскольку его состояние было бы совместно использоваться произвольным подмножеством обрабатываемых запросов. Таким образом, доступ к нему в полном порядке, как упомянул Мэтт, может не потребоваться слишком часто.