22

有人对 asp.net mvc 3 中的多项目区域支持有任何想法吗?因为它在 mvc 2 中被降级为未来状态。如果它仍然不包括在内,那么我们是否应该通过 MvcContrib 期待 ASP.Net MVC Portable Areas。你能分享你的经验吗?

管理大型应用程序的推荐方法是什么?我读到了MEF。什么场景推荐MEF?

4

2 回答 2

15

我是微软 ASP.NET MVC 的开发负责人。

没有计划在 ASP.NET MVC 3 中包含多项目领域。但是,这绝对是我们计划在未来重新审视的领域。

与此同时,MvcContrib 的解决方案可能是最好的选择。MVC Futures 下载仍然包括原始多项目区域功能的旧版本(并且可能只是半功能版本)。因为它的完整源代码也可用,所以您可以构建一个根据您的需求定制的解决方案。

于 2010-10-19T17:18:34.727 回答
6

我需要有相同的结构,所以我想出了如何将区域作为单独的项目。无需更改代码,只需进行一些配置工作。

我将为此创建一个博客条目,但这里是基本步骤。

假设您有一个 MVC 应用程序项目,这将是您的“shell”应用程序。

  1. 右键单击外壳项目和“添加区域...”。输入区域名称。这将创建一个包含您所在区域的区域文件夹。(这不是 100% 需要的,但您确实需要“Areas”文件夹,并且您可以为您的应用程序窃取 XXXXAreaRegistration 类。)

  2. 在您的解决方案中创建一个新的 MVC3 空项目以匹配您的区域。将 XXXXAreaRegistration.cs 文件移动到新项目并根据需要调整命名空间。

  3. 删除模板向导添加的区域文件夹下的文件夹。

  4. 修改新项目的 web.config 并取出连接字符串和 authentication、membership、profile、rolemanger 部分。您实际上并不需要 web.config,但如果没有它,razor intellisense 将无法工作。

  5. 在 shell 项目的“Areas”文件夹中创建一个虚拟目录,以您的区域名称作为别名,并将其指向您的“区域”项目。为此,您需要使用 IIS 或 IIS Express。我使用 IIS。在 IIS express 中,您必须修改配置文件。我认为 ScottGu 有一篇关于如何做到这一点的博客文章。

  6. 在您的“区域”项目上创建一个构建后事件,以将 dll 复制到“外壳”项目的 bin 文件夹中。我的构建事件是:复制 $(TargetDir)\$(TargetFileName) $(SolutionDir)\ShellProjectName\bin\$(TargetFileName)

  7. 在 shell web.config 中,将“area”项目添加到 System.Web/Assemblies 部分。

您可以使用“shell”项目来引用“area”项目,而不是 6/7,它也可以正常工作。但是,您必须每次都部署所有“区域”dll。我可能会使用反射或 MEF 在应用程序启动时执行某种类型的探测代码以将“区域”程序集添加到应用程序域。

您可能还想在 shell 应用程序和区域应用程序中编辑您的路由并将命名空间过滤器添加到它。这样您就不必担心销售应用程序和区域应用程序之间重复的控制器名称冲突。

就是这样。一旦我发布了正式的博客条目,我会尽量记住在此处添加指向它的链接。

如果有人感兴趣,我在http://bob.archer.net/content/aspnet-mvc3-areas-separate-projects上写了我是如何做到这一点的博客。

于 2011-08-23T20:32:44.063 回答