2012-02-02 3 views
8

게시판에있는 사람 here은 MVC를 사용할 때 HttpContext.Current를 사용해서는 안되며 ControllerBase.ControllerContext을 사용해야합니다. 어떤 점에서 이것은 의미가 있지만 다른면에서는 그렇지 않습니다.MVC, HttpContext.Current를 더 이상 사용하지 않아야합니까?

예를 들어 ControllerContext는 인스턴스 변수이므로 모든 세션 변수를 참조하고 싶을 때 컨트롤러에 대한 참조가 필요합니까? 왜 우리는 MVC에서 HttpContext.Current를 사용하지 않을 것입니까? 여전히 할 수 있습니까? 컨트롤러에 대한 참조가 필요없이 내 Session 객체를 가져 오는 "적절한"MVC "방법"이 있습니까?

나는 테스트 와이즈를 알고, 다른 많은 장소에 명시된 이유 때문에 더 낫다. 그러나 Session 변수를 관리하고 HttpContext.Current를 참조하는 프로젝트를 진행하고 있으며 더 좋은 방법이 있는지 알고 싶다. 컨트롤러에 대한 참조를 전달하지 않고 Session 객체에 손을 댔다.

답변

7

HttpContext.Current을 사용하면 단위 테스트가 매우 어려울 수 있습니다. 이는 일반적인 모의 프레임 워크를 사용하여 조롱하는 것이 불가능하기 때문입니다.

HttpContext.Current도 악용 될 수 있고 남용 될 수 있기 때문에 더 부서지기 쉬운 코드입니다. 예를 들어 편리하기 때문에 비즈니스 계층에서 사용할 수 있지만 ASP.NET 이외의 다른 프레젠테이션 계층을 사용하도록 선택하면 비즈니스 계층에서 사용할 수 있습니다.

일반적으로 정적 메서드는 종속성 주입이 될 수 없으므로 싫은 냄새가났습니다.

1

귀하의 한 게시물은 Mock 테스트에 의한 것입니다. Mock에 따라 HttpContext가 없을 수도 있고 컨트롤러 컨텍스트 만있을 수도 있습니다. 그렇지 않으면 HttpContext.Current을 사용합니다. 단, 단위 테스트에서는 사용하지 마십시오.

관련 문제