Почему существуют два несовместимых типа состояния сеанса ASP.NET?


Я вижу два способа работы с данными сеанса в ASP.NET MVC:

  • System.Web.SessionState.HttpSessionState, доступный на HttpApplication
  • System.Web.HttpSessionStateBase, доступный на Controller

данные, хранящиеся в одном, по-видимому, доступны в другом.

к сожалению, единственным общим предком этих двух типов является System.Object, что означает, что я не могу создать многоразовый код утилиты для абстракции либо.

почему API таким образом? Есть важный разница между теми двумя, что мне не хватает?

1 58

1 ответ:

в абстракции ASP.NET в MVC по сравнению с классическим объектам HttpContext запрос, ответ, сессии были введены. Они представляют абстрактные классы и представлены по всей структуре MVC, чтобы скрыть базовый контекст и упростить модульное тестирование, потому что абстрактные классы могут быть издеваться.

например для объекта сеанса, у вас есть HttpSessionStateBase и его реализация HttpSessionStateWrapper.

вот пример того, как преобразовать между классика ASP.NET сессия и абстракция:

HttpSessionStateBase session = new HttpSessionStateWrapper(HttpContext.Current.Session);

так System.Web.SessionState.HttpSessionState который вы имеете в виду является базовым объектом сеанса, который существовал с тех пор классический ASP.NET 1.0. В MVC этот объект завернут в HttpSessionStateWrapper. Но с тех пор ASP.NET MVC - это ASP.NET приложение вы все равно получите глобальное.асакс, в котором у вас есть голый сеанс.