2009-04-06 21 views
25

... ¿absolutamente nada?System.Web.Abstractions: ¿para qué sirve?

¿Qué parte del puzzle no se llene de ASP.NET Web Forms y ASP.NET MVC, respectivamente?

¿Puede de alguna manera crear una aplicación base ASP.NET * que use System.Web.Abstractions para que pueda usarse en ambos tipos de aplicaciones ASP.NET-web?

En ese caso, ¿cómo reajustaron las clases en System.Web.Abstractions de nuevo en ASP.NET WebForms?

No se puede actualizar objetos desde el espacio de nombres, por lo que no se puede usar para burlarse, ¿o sí?

Actualización: Disculpe por no ser claro en cuanto a que conozco el problema con las pruebas de HttpContext y otros objetos de construcción de ASP.NET. Pero gracias por las buenas explicaciones de todos modos.

+6

Completamente fuera del campo izquierdo, pero gracias al título de su pregunta, ahora tengo War by Edwin Starr en mi cabeza. :( –

Respuesta

35

El espacio de nombres contiene tipos que están diseñados para envolver ASP. Clases principales de NET (como HttpSessionState).

¿Qué quieres saber por qué?

Muchas de estas clases ASP.NET principales están selladas o estáticas, por lo que es imposible romper las dependencias entre ellas y su código. ESO significa que no se puede burlar de estas dependencias centrales, lo que dificulta mucho más la prueba de su código ASP.NET. Entonces, en lugar de manipular directamente la HttpResponse directamente en el código, la manipulas a través del HttpResponseWrapper, que, durante el tiempo de prueba, puedes rescatar o simular para controlar cómo se comporta el objeto HttpResponse.

Si alguna vez ha pensado en crear estos contenedores, o ha implementado uno o dos de ellos anteriormente, sabría que hay mucho trabajo envuelto en ese espacio de nombres, y yo, por mi parte, estoy contento de que lo hayan hecho eso.

17

De hecho es para burlarse. - HttpContext es una clase sellada y no se puede burlar (fácilmente). HttpContextBase no está sellado y creo que sus métodos son virtuales, lo que hace que burlarse sea mucho más fácil.

Si bien puede no nuevo en marcha una instancia de HttpContextBase (por ejemplo, para su uso en formularios Web), se puede obtener una instancia a través de:

var ctx = new HttpContextWrapper(HttpContext.Current);