2012-04-05 23 views
8

Ok, entonces estoy un poco confundido en cuanto a lo que está pasando con los siguientes datos.¿Pueden las Vistas MVC acceder a todos los proyectos aunque el proyecto donde se ven las vistas no los hace referencia?

se tiene la siguiente estructura en nuestra aplicación:

  • Portal.Web - Un MVC 3 aplicación web que básicamente contiene toda la puntos de vista, los scripts, css y métodos de extensión de ayuda HTML
  • Portal.Core - Una Biblioteca de clases que es básicamente nuestro Business Objects, tenemos todos nuestros modelos incluidos en este proyecto.
  • Portal.Data - Otra biblioteca de clases que contiene nuestra configuración NHibernate y nuestras clases de DTO.

Aquí está nuestro uso: En el controlador llamamos al modelo ubicado en Portal.Core, que se llena llamando a Portal.Data, por lo que básicamente la Web nunca puede ver datos.

Aquí está el truco: En el controlador, digamos por ejemplo, trato de crear una instancia de un nuevo objeto DTO llamada de cliente, así:

var client = new Client(); 

no va a funcionar, que se espera que no tiene idea de qué cliente es e incluso especificar un uso no lo cortará. Esta bien.

PERO si trato de hacer exactamente la misma línea en la Vista, Resharper agrega el uso a la vista y luego no hay quejas, el proyecto se ejecuta y podemos usar clases DTO en nuestras vistas.

Entonces la pregunta es, ¿por qué es esto? Intento evitar que nuestros juniors usen clases de DTO en Views, por lo que eliminé deliberadamente la referencia al proyecto Data en Web, pero aún pueden usar las clases. ¿Alguien puede arrojar algo de luz?

+0

¿El adaptador también está agregando una referencia? – KingCronus

+0

Nah, eso es solo una cuestión falsa si califico totalmente el tipo con el espacio de nombres y sin la ayuda del reafilamiento, todavía funciona por desgracia. – mattytommo

+1

¡Entonces entiendo su confusión! – KingCronus

Respuesta

3

Ejecuté la misma prueba con las vistas ASPX y Razor. Sin embargo, al hacer referencia a Client en vistas ASPX no funciona en las vistas Razor. Las vistas se compilan sobre la marcha cuando solicita la aplicación, así que eché un vistazo a algunas carpetas en "C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET Files \ portal.web" y desde Las referencias de archivos de cmdline al ensamblado se agregan explícitamente cuando se compila la vista.

Parece que el proceso que compila las vistas de la cuchilla agrega referencias a todos los ensamblajes en la carpeta bin. Sin embargo, mirando la fuente de ASP.NET MVC, no puedo confirmarlo.

Por lo tanto, la única conclusión a la que puedo llegar es que es un efecto secundario del uso del motor Razor View.

Dicho esto, es posible que desee escanear el web.config para ver si se incluyó con el assemblies element.

+0

Gracias por este Werner, +1. Espero que alguien pueda arrojar algo más de luz sobre cómo el motor Razor view obtiene sus referencias e ignora por completo las referencias del proyecto. Es de esperar que alguien sepa una forma de desactivar este comportamiento. – mattytommo

+0

en realidad, después de una investigación adicional, parece que estás en lo cierto!La limpieza de la solución hace que Resharper piense que hay un error en la Vista, entonces el proyecto Data ya no figura en Intellisense (porque ya no está en la carpeta bin). La construcción de la solución elimina el error y el proyecto vuelve al intellisense. Razor puede ver todo de manera efectiva en la carpeta bin y no parece haber nada que se pueda hacer al respecto. La respuesta es tuya, gracias de nuevo :) – mattytommo

Cuestiones relacionadas