Почему в ASP.NET есть два несовместимых типа состояния сеанса? - PullRequest
58 голосов
/ 27 марта 2011

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

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

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

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

Почему API так?Есть ли важное различие между этими двумя, которые мне не хватает?

1 Ответ

88 голосов
/ 27 марта 2011

В ASP.NET MVC были представлены абстракции над классическими объектами HttpContext Request, Response, Session.Они представляют абстрактные классы и доступны по всей структуре 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, вы все равно получаете Global.asax, в котором у вас есть пустой сеанс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...