Загрузка не встроенных представлений из других проектов
Я работаю над проектом MVC3, который должен поддерживать модули. Так, например, у меня есть основной проект MVC3 и проект модуля MVC3 (MyModule).
Теперь я хочу загрузить и отобразить представления из проекта модуля MVC3 в основном проекте. Я написал собственный класс VirtualPathProvider и класс VirtualFile, который выбирает представления из других мест, кроме основного проекта.
Как-то я получаю следующую ошибку: CS0103: The name 'ViewBag' does not exist in the current context.
Я загружаю сборку из проекта модуля в моем базовом проекте, используя следующую строку кода в классе AssemblyInfo в базовом проекте:
[assembly: PreApplicationStartMethod(typeof(ModuleLoader), "Init")]
Класс ModuleLoader выбирает DLL и использует BuildManager.AddReferencedAssembly
добавить сборку.
Теперь я могу вызывать методы действия в MyModuleController.cs, перейдя к http://localhost/MyModule
, В методе Index ActionResult MyModuleController.cs я возвращаю вид следующим образом:
return View("~/Modules/MyModule/Index.cshtml");
VirtualPathProvider проверяет, начинается ли путь с ~ / Modules /, и получает представление (MyModule -> Views -> Index.cshtml) из проекта модуля.
Теперь я искал ошибку и прочитал об отсутствующих файлах Web.config, но у меня есть все в проекте модуля, потому что это полный веб-проект MVC3.
Я много читал о загрузке встроенных представлений из сборок, но возможно ли то, что я описал выше?
Заранее спасибо!
Редактировать:
Решил пойти по пути Griffin-MvcContrib и использовать его систему плагинов, которая, кажется, обеспечивает все, что мне нужно, и вдобавок к этому он использует Autofac, который я уже решил использовать для МОК!
1 ответ
Использование пользовательских VirtualPathProvider
и добавив ссылку на BuildManager
это просто часть решения. Вам также нужно изменить представления и указать, какой макет использовать для каждого представления в DLL.
Далее вы также должны использовать @inherits
вместо @model
Виды.
Или вы можете просто использовать Griffin.MvcContrib, который позаботится обо всем за вас: http://blog.gauffin.org/2012/05/griffin-mvccontrib-the-plugin-system/