如何创建ASP.NET MVC区域作为插件DLL?

Aka*_*ava 17 asp.net-mvc plugins razor asp.net-mvc-3

这是我想要实现的,我想将ASP.NET MVC的AREA分离为纯单个DLL.

  1. Blog.DLL
  2. Forums.DLL
  3. FAQ.DLL

它们中的每一个都是单独的ASP.NET MVC区域,具有自己的默认CSHTML或ASPX页面.从长远来看,安装,迁移和维护大量页面(包括资源,javascripts等)是非常痛苦的.因为大多数这些都不会改变.

我的最终网站将是这样的.

\MvcApplication
   \bin
      \MvcApplication.bin
      \Blog.dll
      \Forums.dll
   \Controllers
      \..
   \Models
      \..
   \Views
      \..
   \Global.asax
   \Web.config
Run Code Online (Sandbox Code Playgroud)

没有添加任何东西,只是删除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
Run Code Online (Sandbox Code Playgroud)

这将有助于重用ASP.NET区域插件,只需将dll放在bin文件夹中即可.但是web.config可能需要进行一些更改,但很可能我们会在数据库中保存配置值,并且只需要web.config中的"Entity Framework连接字符串".

我的挑战(问题)

  1. 可能吗?它肯定在我看来,但会有任何反思/许可问题吗?
  2. 如何在一个DLL中包含cshtml/aspx视图?可能是编译版本?我在codeplex上看过几个基于文本模板的View Engines,但我对如何实际使用它们感到困惑.
  3. 我如何让ViewEngine首先检查物理目录文件是否存在,然后在dll本身作为资源文件查看cshtml/aspx?

Dar*_*rov 9

您可以查看以下文章,该文章说明了如何使用自定义VirtualPathProvider来检索作为资源嵌入到单独程序集中的Razor视图.