58 votes

Pourquoi existe-t-il deux types d'état de session incompatibles dans ASP.NET?

Je vois deux moyens de travailler avec les données de session dans ASP.NET MVC:

  • System.Web.SessionState.HttpSessionState, disponible sur HttpApplication
  • System.Web.HttpSessionStateBase, disponible sur Controller

Les données stockées dans l'un semble être disponible dans les autres.

Malheureusement, le seul ancêtre commun de ces deux types est - System.Object, ce qui signifie que je ne peux pas créer réutilisables utilitaire de code pour l'abstraction de l'un ou l'autre.

Pourquoi est ce que l'API de cette façon? Est-il une différence importante entre les deux que je suis absent?

90voto

Darin Dimitrov Points 528142

Dans ASP.NET MVC abstractions sur la classique HttpContext objets de la Demande, une Réponse, une Session a été introduite. Ils représentent les classes abstraites et sont exposées partout dans le framework MVC pour masquer le contexte sous-jacent et de simplifier les tests unitaires parce que les classes abstraites peuvent être moqué.

Par exemple, pour la session de l'objet que vous avez HttpSessionStateBase et sa mise en oeuvre HttpSessionStateWrapper.

Voici un exemple de comment faire pour convertir entre le classique ASP.NET session et l'abstraction:

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

Si l' System.Web.SessionState.HttpSessionState auquel on se réfère à la session de l'objet qui existait depuis classique ASP.NET 1.0. Dans MVC cet objet est enveloppé dans un HttpSessionStateWrapper. Mais depuis ASP.NET MVC est un ASP.NET l'application vous obtenez toujours le Mondial.asax dans lequel vous avez le nu de la session.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X