Подтвердить что ты не робот

Как создать ASP.NET MVC в качестве DLL-модуля?

Вот чего я хочу достичь, я хочу отделить AREAs ASP.NET MVC как чистую одиночную DLL.

  • Blog.DLL
  • Forums.DLL
  • FAQ.DLL

Каждая из них представляет собой отдельную ASP.NET MVC Area со своими собственными страницами CSHTML или ASPX по умолчанию. Установка, перенос и поддержание большого количества страниц, включая ресурсы, javascripts и т.д., - настоящая боль для длительной работы. Поскольку большинство из них вряд ли изменится.

Мой последний сайт будет таким.

\MvcApplication
   \bin
      \MvcApplication.bin
      \Blog.dll
      \Forums.dll
   \Controllers
      \..
   \Models
      \..
   \Views
      \..
   \Global.asax
   \Web.config

Не добавляя ничего, просто отбрасывая Blog.dll, мое приложение должно поддерживать/блог и все его страницы. Если я хочу что-то настроить, чем добавить область и добавить только cshtml-страницы.

\MvcApplication
   \bin
      \MvcApplication.bin
      \Blog.dll
      \Forums.dll
   \Areas
      \Blog
          \Views
              \Shared
                  \BlogLayout.cshtml <-- this will override the look
   \Controllers
      \..
   \Models
      \..
   \Views
      \..
   \Global.asax
   \Web.config

Это поможет повторно использовать плагины ASP.NET Area, просто отбросив dll в папке bin. Однако web.config может потребовать внесения некоторых изменений, но, скорее всего, мы сохраним значения конфигурации в базе данных, и только нужно, чтобы это было "Строка подключения Entity Framework" в web.config.

Мои проблемы (вопросы)

  • Возможно ли это? Он уверен, что я смотрю, но будут ли какие-либо проблемы с отражением/разрешением?
  • Как включить представления cshtml/aspx в пределах одной DLL? Возможно, скомпилированные версии? Я видел пару текстовых шаблонов View Engine на Codeplex, но я немного смущен тем, как их использовать.
  • И как мне заставить ViewEngine сначала проверить, существует ли файл физической директории или нет, а затем просмотреть cshtml/aspx внутри самой библиотеки dll в качестве файла ресурсов?
4b9b3361

Ответ 1

Вы можете взглянуть на следующую статью, которая иллюстрирует, как пользовательский VirtualPathProvider может использоваться для извлечения представлений Razor, встроенных в отдельные сборки в качестве ресурсов.

Ответ 2

Возможно, стоит посмотреть на переносные области из mvccontrib. Я не использовал их с MVC 2, но нашел следующий вопрос SO, у кого-то есть проблемы с их использованием с MVC 3, с некоторыми возможными решениями: ASP.NET MVC 3, Razor Views, и портативные области

Ответ 3

MvcCodeRouting поддерживает то, что вы хотите, а также много других интересных вещей. Проверьте этот пост о плагинах ASP.NET MVC.