Почему существуют два несовместимых типа состояния сеанса ASP.NET?
Я вижу два способа работы с данными сеанса в ASP.NET MVC:
-
System.Web.SessionState.HttpSessionState
, доступный наHttpApplication
-
System.Web.HttpSessionStateBase
, доступный наController
данные, хранящиеся в одном, по-видимому, доступны в другом.
к сожалению, единственным общим предком этих двух типов является System.Object
, что означает, что я не могу создать многоразовый код утилиты для абстракции либо.
почему API таким образом? Есть важный разница между теми двумя, что мне не хватает?
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 приложение вы все равно получите глобальное.асакс, в котором у вас есть голый сеанс.