2012-04-05 3 views
8

Ok, ich bin etwas verwirrt, was mit den folgenden Daten passiert.Können MVC-Ansichten auf alle Projekte zugreifen, obwohl sie nicht vom Projekt referenziert werden, in dem sich die Ansichten befinden?

Wir haben die folgende Struktur in unserer Anwendung:

  • Portal.Web - Ein MVC 3 Web App, die im Grunde alle Ansichten, Skripte enthält, CSS und HTML-Hilfsmethoden Erweiterung
  • Portal.Core - Eine Klassenbibliothek, die im Grunde unsere Business Objects ist, wir haben alle unsere Modelle in diesem Projekt enthalten.
  • Portal.Data - Eine weitere Klassenbibliothek, die unsere NHibernate config und unsere DTO-Klassen enthält.

Hier ist unsere Nutzung: In der Steuerung haben wir das Modell in Portal.Core sie nennen, die Portal.Data durch den Aufruf auffüllt, so dass im Grunde Web niemals Daten sehen.

Hier ist der Haken: In der Steuerung, zum Beispiel sagen, ich versuche und instanziiert einen neuen DTO-Objekt-Client wie so genannt:

var client = new Client(); 

Es wird nicht funktionieren, die es keine Ahnung, was Kunden erwartet wird, hat ist und sogar die Angabe einer Verwendung wird es nicht schneiden. Das ist gut.

ABER Wenn ich versuche und genau die gleiche Zeile in der Ansicht, fügt Resharper die Verwendung der Ansicht und dann keine Beschwerden, das Projekt läuft und wir können DTO-Klassen in unseren Ansichten verwenden.

Die Frage ist also, warum? Ich versuche, unsere Juniors davon abzuhalten, DTO-Klassen in Views zu verwenden. Daher habe ich den Verweis auf das Data-Projekt im Web absichtlich entfernt, aber sie können immer noch die Klassen verwenden. Kann jemand Licht abwerfen?

+0

Ist ReSharper auch eine Referenz hinzufügen? – KingCronus

+0

Nein, das ist nur ein Ablenkungsmanöver, wenn ich den Typ mit dem Namespace vollständig qualifiziere und ohne Hilfe von Resharper funktioniert es leider immer noch. – mattytommo

+1

Dann verstehe ich Ihre Verwirrung! – KingCronus

Antwort

3

lief ich den gleichen Test mit ASPX und Razor Blick. Das Verweisen auf Client in ASPX-Ansichten schlägt jedoch in Razor-Ansichten fehl, die funktionieren. Die Sichten werden im Handumdrehen kompiliert, wenn Sie die Anwendung anfordern, daher habe ich mir einige Ordner in "C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporäre ASP.NET-Dateien \ portal.web" und von cmdline files Verweise auf die Assembly werden explizit hinzugefügt, wenn die Ansicht kompiliert wird.

Es scheint, der Prozess, die Referenzen Rasierapparat Ansichten fügt zu allen Baugruppen im Ordner ist kompiliert. Wenn ich jedoch die Quelle von ASP.NET MVC betrachte, kann ich dies nicht bestätigen.

Also, die einzige Schlussfolgerung, die ich kommen kann, ist, dass es sich um eine Nebenwirkung ist die Razor-Ansicht-Engine verwenden.

Das heißt, Sie die web.config scannen, um zu sehen möchten, wenn sie die assemblies element mit aufgenommen wurde.

+0

Danke dafür Werner, +1. Ich hoffe, dass jemand in der Lage ist, ein wenig mehr Licht in die Frage zu bringen, wie die Razor-View-Engine ihre Referenzen erhält und die Projektreferenzen vollständig ignoriert. Hoffentlich weiß jemand eine Möglichkeit, dieses Verhalten zu deaktivieren. – mattytommo

+0

tatsächlich, bei näherer Untersuchung scheint es, dass Sie richtig sind!Durch das Bereinigen der Lösung merkt Resharper, dass in der Ansicht ein Fehler aufgetreten ist. Das Datenprojekt wird in Intellisense nicht mehr aufgeführt (weil es sich nicht mehr im bin-Ordner befindet). Durch das Erstellen der Lösung wird der Fehler behoben und das Projekt wird wieder in das intelligente System geladen. Razor kann effektiv alles im bin-Ordner sehen und es scheint nichts dagegen zu geben. Die Antwort gehört dir, danke nochmal :) – mattytommo

Verwandte Themen