2010-11-22 12 views
0

Ich spiele ein wenig mit dem Aufteilen einer MVC-Site in mehrere Baugruppen (lief in einige issues earlier).ASP.NET MVC 3 RC und benutzerdefinierte ViewEngine für extern geladene Ansichten zu ermöglichen

Jetzt habe ich fast alles funktioniert, bekam das MVC Hauptprojekt, das in irgendwelchen externen Versammlungen lädt, die es finden kann. Die externen Baugruppen sind grundsätzlich externe Bereiche. Als ich es hatte, die Views und web.config in den Area-Ordner der Haupt-Sites zu kopieren, hat alles gut geklappt. Jetzt wird dieser Ordner wahrscheinlich nach einiger Zeit etwas aufgebläht sein, also dachte ich, ich würde versuchen, stattdessen die Views als Ressourcen in der Area-Assembly hinzuzufügen, um zu sehen, wie das funktioniert.

Erstellt meine eigene VirtualPathProvider und meine eigene VirtualFile, registriert sie mit der HostingEnvironment denken, alles war gut. Stellt sich heraus, es verwendet nur die VirtualPathProvider hinzugefügt, um die HostingEnvironment bei der ersten Belastung, nicht durch die folgenden View-Lasten durch die ViewEngine .. Ok gut, fand ein paar Beispiele dafür, wie Sie dies umgehen könnten, indem Sie Ihre eigenen ViewEngine zu verwenden eigenes VPP. Aber ja, das scheint nicht eine praktikable Lösung für MVC 3 ..

zu sein, wie es sich herausstellt, weder RazorViewEngine noch WebFormViewEngine implementieren zwei der „Schlüsselfunktionen“ wie es scheint, FileExists und IsValidPath. Diese sind von BuildManagerViewEngine geerbt, und Sie wissen was? Diese Methoden sind als sealed gekennzeichnet.

Wer hat das mit MVC 3 versucht und könnte mich vielleicht in die richtige Richtung stoßen? Ich habe die MVC 3-Quelle jetzt schon eine ganze Weile angeguckt, aber ich kann einfach keine Möglichkeit sehen.

+0

Und BuildManagerViewEngine ist von VirtualPathProviderViewEngine geerbt, die tatsächlich aussieht, wie es die VPP der HostingEnvirnment verwendet .. Jetzt bin ich verwirrt .. – Robin

Antwort

1

Jetzt fühle ich mich ein bisschen dumm, es scheint, ich habe das VPP zu spät geladen. Hatte es in Application_Start, aber wenn ich es stattdessen zu meinem PreApplicationStartMethod zog, wurde es von ViewEngine verwendet. (So ​​scheint keine Implementierung von ViewEngine benötigt zu werden, wey!)

Problem jetzt ist, dass, wenn ich versuche, zu einer Ansicht zu kommen, die als eine Ressource gespeichert wird, ich es herunterladen lasse, anstatt es gerendert zu haben. Aber das ist etwas anderes als das so!

Verwandte Themen