Подтвердить что ты не робот

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

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

var ctx = new HttpContextWrapper(HttpContext.Current);