2009-04-06 29 views
25

... hoàn toàn không có gì?System.Web.Abstractions: nó tốt cho cái gì?

gì một phần của câu đố nó điền cho ASP.NET WebFormsASP.NET MVC tương ứng?

Bạn có thể tạo một ứng dụng cơ sở ASP.NET * sử dụng System.Web.Abstractions để nó có thể được sử dụng trong cả hai loại ứng dụng web ASP.NET?

Trong trường hợp đó, làm thế nào chúng có thể phù hợp với các lớp trong System.Web.Abstractions trở lại ASP.NET WebForms?

Bạn không thể tạo đối tượng mới từ không gian tên, vì vậy không thể sử dụng đối tượng này để chế nhạo, phải không?

Cập nhật: Xin lỗi vì không rõ ràng rằng tôi biết sự cố khi kiểm tra HttpContext và các đối tượng ASP.NET dựng khác. Nhưng cảm ơn cho lời giải thích tốt anyway.

+6

Hoàn toàn ngoài cánh đồng, nhưng nhờ vào tiêu đề câu hỏi của bạn, bây giờ tôi đã có chiến tranh bởi Edwin Starr trong đầu của tôi. :( –

Trả lời

35

Các namespace chứa các loại được thiết kế để quấn ASP. Các lớp cốt lõi của NET (chẳng hạn như HttpSessionState).

Điều gì, bạn muốn biết tại sao?

Nhiều lớp ASP.NET cốt lõi này được niêm phong hoặc tĩnh, làm cho nó không thể phá vỡ sự phụ thuộc giữa chúng và mã của bạn. Điều đó có nghĩa là bạn không thể giả lập những phụ thuộc cốt lõi này, làm cho nó khó khăn hơn nhiều để kiểm tra mã ASP.NET của bạn. Vì vậy, thay vì trực tiếp thao tác trực tiếp với HttpResponse bằng mã, bạn thao tác nó qua HttpResponseWrapper, trong đó, trong thời gian thử nghiệm, bạn có thể stub hoặc giả lập để kiểm soát cách đối tượng HttpResponse hoạt động.

Nếu bạn đã từng nghĩ đến việc tạo các trình bao bọc này hoặc đã triển khai một hoặc hai trình bao trước đó, bạn biết rằng có rất nhiều công việc được bao bọc trong không gian tên đó, và tôi rất vui vì chúng đã làm nó.

17

Nó thực sự là để chế nhạo. - HttpContext là một lớp niêm phong và không thể (dễ dàng) chế nhạo. HttpContextBase không được niêm phong và tôi tin rằng đó là phương pháp ảo, làm cho việc nhạo báng dễ dàng hơn nhiều.

Trong khi bạn có thể không phải là mới-up một thể hiện của HttpContextBase (nói, để sử dụng trong WebForms), bạn có thể nhận được một thể hiện qua:

var ctx = new HttpContextWrapper(HttpContext.Current); 
Các vấn đề liên quan