17

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

  1. 博客.DLL
  2. 论坛.DLL
  3. FAQ.DLL

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

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

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

无需添加任何东西,只需删除 Blog.dll,我的应用程序就应该支持 /blog 及其所有页面。如果我想定制一些东西,我可以添加区域,并且只添加 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 中的“实体框架连接字符串”。

我的挑战(问题)

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

3 回答 3

9

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

于 2012-07-14T10:26:51.940 回答
1

也许值得看看 mvccontrib 的便携式区域。自 MVC 2 以来我没有使用过它们,但有人在使用 MVC 3 时遇到了一些问题,发现了以下 SO 问题,并提供了一些可能的解决方案:ASP.NET MVC 3, Razor Views, and Portable Areas

于 2012-07-14T10:35:55.843 回答
1

MvcCodeRouting支持你想要的,以及许多其他很酷的东西。查看这篇关于 ASP.NET MVC 插件的文章。

于 2012-07-14T13:31:39.950 回答