System.Web.Abstractions: для чего это нужно?

... совершенно ничего?

Какую часть головоломки он заполняет для ASP.NET WebForms и ASP.NET MVC соответственно?

Можете ли вы как-то создать базовое приложение ASP.NET *, которое использует System.Web.Abstractions, чтобы его можно было использовать в обоих видах веб-приложений ASP.NET?

В таком случае, как они вписали классы в System.Web.Abstractions обратно в ASP.NET WebForms?

Вы не можете создавать новые объекты из пространства имен, поэтому его нельзя использовать для насмешек, не так ли?

Обновление: извините за то, что не ясно, что я знаю проблему с тестированием HttpContext и других build-it ASP.NET-объектов. Но все равно спасибо за хорошие объяснения.

2 ответа

Решение

Пространство имен содержит типы, предназначенные для переноса основных классов ASP.NET (например, HttpSessionState).

Что, ты хочешь знать почему?

Многие из этих основных классов ASP.NET являются изолированными или статическими, что делает невозможным нарушение зависимостей между ними и вашим кодом. Это означает, что вы не можете смоделировать эти основные зависимости, что значительно затрудняет тестирование вашего кода ASP.NET. Таким образом, вместо того, чтобы напрямую манипулировать HttpResponse непосредственно в коде, вы манипулируете им через HttpResponseWrapper, который во время тестирования вы можете заглушки или макеты для управления поведением объекта HttpResponse.

Если вы когда-нибудь задумывались о создании этих оболочек или реализовали один или два из них ранее, вы бы знали, что в этом пространстве имен собрано много работы, и я, например, рад, что они это сделали.

Это действительно для насмешек. - HttpContext является закрытым классом и не может (легко) издеваться. HttpContextBase не запечатан, и я полагаю, что его методы являются виртуальными, что делает насмешку намного проще.

Хотя вы не можете обновить экземпляр HttpContextBase (скажем, для использования в WebForms), вы можете получить экземпляр через:

var ctx = new HttpContextWrapper(HttpContext.Current);
Другие вопросы по тегам