ASP.Net MVC 3中的多项目区域

22

有没有人知道在asp.net mvc 3中多项目区域支持的情况?由于在mvc 2中已被降级为未来的状态。如果仍未包含,则我们是否应该寻找MvcContrib中的ASP.Net MVC可移植区域。你能分享一下你的经验吗?

管理大型应用程序的推荐方式是什么?我了解了MEF。在哪些场景下推荐使用MEF?

2个回答

15

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

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

与此同时,MvcContrib的解决方案可能是最好的选择。MVC Futures下载仍包含原始多项目区域功能的旧版本(可能只是半功能),因为其完整源代码也可用,您可能能够构建一个符合您需求的解决方案。


20
在我看来,ASP.NET MVC 目前最薄弱的部分是模块化环境的创建。我希望 MVC 团队能尽快解决这个问题,因为对我们来说,创建模块化环境绝对是必须的。 - W3Max
MVC4 的时间可能会提前一些,但由于企业 LOB 在 Silverlight 方面处于不确定状态,您需要确保故事情节已经稳定才能切换到 MVC4... 希望 P&P 能够参与并提供一个类似 Silk 的示例! - felickz

6
我需要有相同的结构,所以我已经想出如何将区域作为单独的项目。不需要进行任何代码更改,只需进行一些配置工作即可。
我将在博客中创建一个条目来介绍这个过程,但以下是基本步骤。
假设您有一个单一的MVC应用程序项目,这将是您的“shell”应用程序。
1.右键单击shell项目并选择“添加区域...”。键入区域名称。这将创建一个包含您的区域的Areas文件夹。(这不是必需的,但您需要“Areas”文件夹,并且可以为应用程序窃取XXXXAreaRegistration类。)
2.在您的解决方案中创建一个新的MVC3空项目以匹配您的区域。将XXXXAreaRegistration.cs文件移动到新项目中,并根据需要调整命名空间。
3.删除模板向导添加的areas文件夹下的文件夹。
4.修改新项目的web.config并删除连接字符串和身份验证、成员资格、配置文件、角色管理器部分。您不需要web.config,但是如果没有它,剃刀智能感知就无法使用。
5.在shell项目的“Areas”文件夹中创建一个虚拟目录,别名为您的区域名称,并将其指向您的“area”项目。您需要使用IIS或IIS Express。我使用IIS。在IIS Express中,您必须修改配置文件。我想ScottGu在如何执行此操作方面有一个博客条目。
6.在“area”项目上创建一个后期生成事件,将dll复制到“shell”项目的bin文件夹中。我的构建事件是:copy $(TargetDir)\$(TargetFileName) $(SolutionDir)\ShellProjectName\bin\$(TargetFileName)
7.在shell web.config中将“area”项目添加到System.Web/Assemblies部分。
您可以只使用步骤6/7引用“area”项目和“shell”项目,这同样有效。但是,每次都必须部署所有“area” dlls。我可能会使用反射或MEF编写某种类型的探测代码,在应用程序启动时将“area”程序集添加到应用程序域中。
您可能还希望编辑路由,并在shell应用程序和区域应用程序中添加命名空间过滤器。这样,您就不必担心销售应用程序和区域应用程序之间的重复控制器名称冲突。
大约就是这样。一旦我发布了正式的博客条目,我将尝试记住在此处添加链接。
如果有人感兴趣,我在http://bob.archer.net/content/aspnet-mvc3-areas-separate-projects上介绍了我是如何做到这一点的。

嗯,看起来很有趣。期待看到你的博客文章,特别是关于MEF部分的内容。 - Tassadaque
经过进一步的测试,我已确定区域项目不需要引用。显然,MVC代码使用BuildManager获取程序集列表。因此,您只需设置您的“区域”项目输出到shell项目的bin文件夹即可,无需执行其他操作。 - PilotBob
如果有人感兴趣,我在http://bob.archer.net/content/aspnet-mvc3-areas-separate-projects上写了一篇关于如何做到这一点的博客。 - PilotBob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接