2012-02-02 23 views
8

Ai đó trong bài đăng here, nhận xét rằng bạn không nên sử dụng HttpContext.Current khi sử dụng MVC, thay vào đó, bạn nên sử dụng ControllerBase.ControllerContext. Trong một số khía cạnh, điều này có ý nghĩa, nhưng ở khía cạnh khác nó không.MVC, không phải "giả sử" để sử dụng HttpContext.Current nữa?

Ví dụ, ControllerContext là một biến mẫu, vì vậy ở khắp mọi nơi tôi muốn tham chiếu, nói, biến Session của tôi, tôi cần phải có một tham chiếu đến Controller? Tại sao chúng ta "không phải là" để được sử dụng HttpContext.Current trong MVC, khi bạn vẫn có thể? Có một "thích hợp" MVC "cách" để có được ở đối tượng Session của tôi mà không cần phải có một tham chiếu đến Controller?

Tôi biết kiểm tra khôn ngoan, nó là tốt hơn cho các lý do được nêu ở nhiều nơi khác, nhưng tôi đang làm việc trên một dự án quản lý biến phiên và tài liệu tham khảo HttpContext.Current và tôi muốn biết nếu có một cách tốt hơn để có được bàn tay của tôi trên đối tượng Session mà không thông qua một tham chiếu đến bộ điều khiển.

Trả lời

7

Điều này chủ yếu là do thử nghiệm đơn vị sẽ rất khó khăn nếu bạn sử dụng HttpContext.Current vì việc bỏ qua giá trị này là không thể sử dụng các khuôn mẫu giả bình thường.

HttpContext.Current cũng làm cho mã dễ vỡ hơn vì nó có thể bị lạm dụng và lạm dụng. Ví dụ, bạn có thể sử dụng nó trong lớp kinh doanh vì nó là thuận tiện nhưng nó sẽ phá vỡ nếu bạn chọn sử dụng một lớp trình bày thay thế khác với ASP.NET.

Nói chung các phương pháp tĩnh ngày nay được tán thành vì chúng không thể là được tiêm phụ thuộc.

1

Một bài đăng của bạn là do thử nghiệm Mock, ở đó tùy thuộc vào Mô hình có thể không phải là một HttpContext, chỉ có ngữ cảnh của trình điều khiển. Nếu không, tôi sử dụng HttpContext.Current, không phải trong các bài kiểm tra đơn vị của tôi.

Các vấn đề liên quan