2011-03-27 3 views
56

내가 ASP.NET MVC에서 세션 데이터로 작업의 두 가지 방법을 참조하십시오ASP.NET에 두 가지 호환되지 않는 세션 상태 유형이있는 이유는 무엇입니까?

  • System.Web.SessionState.HttpSessionState, HttpApplication
  • System.Web.HttpSessionStateBase 볼 수 있습니다, 하나에 저장 Controller

데이터로 볼 수 있습니다 사용할 것 같다 다른 쪽.

불행히도이 두 유형의 유일한 조상은 System.Object입니다. 즉, 둘 중 하나의 추상화를 위해 재사용 가능한 유틸리티 코드를 만들 수 없습니다.

왜 API가 이렇게됩니까? 내가 놓친 두 가지 사이에 중요한 차이점이 있습니까?

+0

'Request'와'RequestBase'로 동일한 패턴을 발견했습니다. 기본 API 조각의 두 가지 병렬 버전이 있습니까? –

답변

82

고전적인 HttpContext 객체에 대한 ASP.NET MVC 추상화에서 Request, Response, Session이 소개되었습니다. 그것들은 추상 클래스를 나타내며, MVC 프레임 워크 전체에 노출되어 기본 컨텍스트를 숨기고 추상 클래스를 조롱 할 수 있으므로 유닛 테스트를 단순화합니다.

예를 들어 세션 개체의 경우 HttpSessionStateBase이고 구현은 HttpSessionStateWrapper입니다.

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

그래서 당신이 참조하는 System.Web.SessionState.HttpSessionState 고전 ASP.NET 이후로 존재 기본 세션 객체는 다음과 같습니다

는 고전 ASP.NET 세션과 추상 사이의 변환하는 방법의 예 1.0. MVC에서이 객체는 HttpSessionStateWrapper으로 래핑됩니다. 그러나 ASP.NET MVC는 ASP.NET 응용 프로그램이므로 맨 처음 세션이있는 Global.asax를 계속 사용할 수 있습니다.

+6

우수 답변 대린! 고맙습니다. –

+1

'새로운 HttpRequestWrapper (HttpContext.Current.Request)'와'새로운 HttpResponseWrapper (HttpContext.Current.Response)'를 생성 할 수도 있습니다. –

관련 문제