2011-06-11 3 views
3

별도의 도우미 클래스에서 컨트롤러 외부의 HttpContext 세션에 액세스하는 것이 좋습니까? 별도의 도우미 클래스에서 컨트롤러 외부의 HttpContext 세션에 액세스하는 모범 사례

====================

컨트롤러는 헬퍼 클래스에 세션 및 전송에서 데이터를 가져 오는 모든 책임을 져야

HomeController : BaseController 
{ 
    var value1 = Httpcontext.Session["key1"]; 
    var value2 = Httpcontext.Session["key2"]; 
    var val... 
    CallAMethod(value1,value2,val...); 
} 

아니면이 HttpContextBase 조롱하고 다음과 같이 사용한다? ISessionWrapper의

HomeController : BaseController 
{ 
    //Use Dependency Injection pattern 
    CallAMethod(base.SessionWrapper); 
} 

구현

public interface ISessionWrapper 
{ 
    T GetFromSession<T>(string key); 
    SetInSession(string key, object value); 
} 

public class HttpContextSessionWrapper : ISessionWrapper 
{ 
    private T GetFromSession<T>(string key) 
    { 
     return (T) HttpContext.Session[key]; 
    } 

    private void SetInSession(string key, object value) 
    { 
     HttpContext.Session[key] = value; 
    } 
} 

public class BaseController : Controller 
{ 
    public ISessionWrapper SessionWrapper { get; set; } 

    public BaseController() 
    { 
     SessionWrapper = new HttpContextSessionWrapper(); 
    } 
} 

답변

1

은 분명히 당신이 (당신이 ISessionWrapper를 작성의 부담을 겪고있는 이유는 모든 그건 후) 코드에서 일부 테스트 용이성을 갖고 싶어한다.

두 가지 방법 모두 기복이 있습니다. 직접

  • 신속한

  • 테스트 클래스에 대한 몇 가지 생각을 필요로 개발할 수있는 HttpContext를 사용


    • . Nemely HttpContext를 에뮬레이트하는 기능. NET에서 라이브러리를 사용할 수 있습니다. 의존성 주입 (ISessionWrapper)를 사용하여


  • : 느린

    • 는 액세스에 대한 HttpContext를 "바퀴를 재발견"필요 개발

    • 더 많은 코드를 작성하고


그래서, 나는 두 방법의 장단점을 생각해 내 목표에 따라 결정하는 것 mantain합니다.

그러나 개인적으로 필자는 작성하는 데 훨씬 적은 코드가 필요한 경로를 선택합니다.(영업에서의 잔소리 후) 질문의 마음에 응답에서 항상 액츄에이터에 전달하기 전에 데이터 수집을 관리해야 컨트롤러를

를 추가 할


편집.

+0

답장을 보내 주셔서 감사합니다. 다른 질문은 컨트롤러가 데이터를 세션에서 가져 와서 도우미 클래스로 전송하는 모든 책임을 져야합니까? –

+0

게시 한 방식에 따라 HttpContext에 대한 액세스를 처리하는 가장 좋은 방법은 무엇인지 묻는 것 같았습니다. –