Я пробую механизм плагинов для ASP.NET MVC 3 (razor), используя встроенные представления, как описано здесь я изменил механизм просмотра, чтобы он наследовал RazorViewEngine, но в остальном ничего не менял. Теперь я вызываю действие контроллера в сборке плагина, которое отображает представление, это работает нормально. Но представление не может найти файл _viewstart.cshtml и, следовательно, макет. В идеале я хотел бы, чтобы хост-приложение определяло начало просмотра и макет. Возможно, мне не следует напрямую вызывать действие контроллера плагина, а только отображать частичные части из плагина и позволять хост-приложению обрабатывать основные контроллеры/представления.
Это местоположения просмотра, которые опробованы в моем собственном VirtualPathProvider:
"~/Plugins/MyMvcApplication.dll/_ViewStart.cshtml"
"~/Plugins/MyMvcApplication.dll/_ViewStart.vbhtml"
"~/Plugins/_ViewStart.cshtml"
"~/Plugins/_ViewStart.vbhtml"
"~/_ViewStart.cshtml"
"~/_ViewStart.vbhtml"
Я также подумываю просто забыть о встраивании представлений, так как это кажется немного запутанным, поэтому я мог бы просто выбрать копирование представлений в хост-приложение, что может упростить отладку для будущих пользователей. Риск заключается в том, что пользователи будут вносить изменения в эти представления, что затруднит обновление плагина. Одна из причин, по которой я сомневаюсь в механизме плагина, связана с возможными последствиями для производительности, хотя я еще не проводил никаких измерений.