有没有人对asp.net mvc 3中的多项目区域支持有任何想法?因为它在mvc 2中被降级为未来状态。如果它仍未包括在内,那么我们应该期待ASP.Net MVC Portable Areas via MvcContrib。你可以分享你的经历吗?
管理大型应用程序的推荐方法是什么?我读到了MEF。在什么情况下推荐使用MEF?
答案 0 :(得分:15)
我是微软ASP.NET MVC的开发负责人。
没有计划在ASP.NET MVC 3中包含多个项目区域。但是,它绝对是我们计划在未来重新审视的一个领域。
与此同时,MvcContrib的解决方案可能是最好的选择。 MVC期货下载仍包括原始多项目区域功能的旧版(也许只是半功能版)。由于它的完整源代码也可用,您可以构建一个根据您的需求定制的解决方案。
答案 1 :(得分:6)
我需要有相同的结构,所以我想出了如何将区域作为单独的项目。不需要更改代码,只需要进行一些配置工作。
我将在此创建一个博客条目,但这是基本步骤。
假设您有一个MVC应用程序项目,这将是您的“shell”应用程序。
右键单击shell项目和“Add Area ...”。输入区域名称。这将创建一个区域文件夹,其中包含您的区域。 (这不是100%需要,但你需要“Areas”文件夹,你可以窃取应用程序的XXXXAreaRegistration类。)
在您的解决方案中创建一个新的MVC3空项目以匹配您的区域。将XXXXAreaRegistration.cs文件移动到新项目并根据需要调整命名空间。
删除模板向导添加的区域文件夹下的文件夹。
修改新项目的web.config并取出连接字符串以及身份验证,成员资格,配置文件,rolemanger部分。你真的不需要web.config但没有它就没有razor intellisense。
在shell项目的“Areas”文件夹中创建一个虚拟目录,并将您所在区域的名称作为别名,并将其指向“区域”项目。您需要使用IIS或IIS Express。我使用IIS。在IIS Express中,您必须修改配置文件。我认为ScottGu有关于如何做到这一点的博客文章。
在“区域”项目上创建一个构建后事件,将dll复制到“shell”项目bin文件夹。我的构建事件是:copy $(TargetDir)\ $(TargetFileName)$(SolutionDir)\ ShellProjectName \ bin \ $(TargetFileName)
在shell web.config中将“area”项目添加到System.Web / Assemblies部分。
您可以使用“shell”项目引用“区域”项目,而不是6/7,它也可以正常工作。但是,每次你必须部署所有“区域”dll。我可能会做一些类型的探测代码,在app启动时使用反射或MEF将“区域”程序集添加到应用程序域。
您可能还想编辑路由,并在shell应用和区域应用中添加命名空间过滤器。这样您就不必担心销售应用程序和区域应用程序之间存在重复的控制器名称冲突。
就是这样。一旦我发布了正式的博客文章,我会尽量记住在这里添加一个链接。
如果有人感兴趣,我在http://bob.archer.net/content/aspnet-mvc3-areas-separate-projects写了我的博客文章。