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

时间:2012-07-14 09:54:04

标签: asp.net-mvc asp.net-mvc-3 plugins razor

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

  1. Blog.DLL
  2. Forums.DLL
  3. FAQ.DLL
  4. 它们中的每一个都是单独的ASP.NET MVC区域,具有自己的默认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区域插件,只需将dll放在bin文件夹中即可。但是web.config可能需要进行一些更改,但很可能我们会在数据库中保存配置值,只需要在web.config中使用“Entity Framework连接字符串”。

    我的挑战(问题)

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

3 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:1)

也许值得从mvccontrib查看便携式区域。我从MVC 2开始就没有使用过它们,但是在MVC 3中使用它们时遇到了一些问题的人发现了以下问题:ASP.NET MVC 3, Razor Views, and Portable Areas

答案 2 :(得分:1)

MvcCodeRouting支持你想要的东西,以及许多其他很酷的东西。查看有关ASP.NET MVC插件的this post