2010-11-22 9 views
0

Я немного поиграю, разделив MVC-сайт на несколько сборок (столкнулся с некоторыми issues earlier).ASP.NET MVC 3 RC и пользовательский ViewEngine, позволяющий загружать извне Просмотров

Теперь у меня почти все работает, есть главный проект MVC, который загружается в любые внешние сборки, которые он может найти. Внешние сборки в основном внешние области. Когда у меня было это, скопируйте Views и web.config в папку «Основные области», все работает отлично. Теперь эта папка, скорее всего, начнет немного раздуваться через некоторое время, поэтому я подумал, что я попытаюсь добавить в качестве ресурсов в области сборки вместо этого, посмотрим, как это работает.

Создал мой собственный VirtualPathProvider и мой собственный VirtualFile, зарегистрировал их с HostingEnvironment, думая, что все было хорошо. Оказывается, он использует только VirtualPathProvider, добавленный к HostingEnvironment при первой загрузке, а не по следующим Просмотр-нагрузкам по ViewEngine .. Хорошо, нашел несколько примеров того, как вы могли обойти это, реализовав свой собственный ViewEngine, чтобы использовать ваши собственный VPP. Но да, это, кажется, не будет осуществимым решением для MVC 3 ..

Как выясняется, ни RazorViewEngine, ни WebFormViewEngine реализовать два из «ключевых функций» это кажется, FileExists и IsValidPath. Они унаследованы от BuildManagerViewEngine, и вы знаете что? Эти методы отмечены как sealed ..

Любой, кто пробовал это с MVC 3 и, возможно, мог подтолкнуть меня в правильном направлении? Я уже давно смотрю на источник MVC 3, но я просто не вижу никакого способа сделать это.

+0

И BuildManagerViewEngine наследуется от VirtualPathProviderViewEngine, который на самом деле выглядит так, как будто он использует VPP HostingEnvirnment. Теперь я запутался .. – Robin 2010-11-22 15:00:42

ответ

1

Теперь я чувствую себя немного глупо, кажется, что я загрузил VPP слишком поздно .. Если бы это было в Application_Start, но когда я переместил его на свой PreApplicationStartMethod, он был использован ViewEngine. (Так что никакой реализации ViewEngine, по-видимому, не требуется, wey!)

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