System.Web.Abstractions: для чего это нужно? - PullRequest
26 голосов
/ 06 апреля 2009

... абсолютно ничего?

Какую часть головоломки он заполняет для 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 ]

36 голосов
/ 06 апреля 2009

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

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

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

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

17 голосов
/ 06 апреля 2009

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

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

var ctx = new HttpContextWrapper(HttpContext.Current);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...