【发布时间】:2010-09-01 15:56:44
【问题描述】:
有没有一种方法可以获取 MVC 项目中区域的名称?
以下是我能想到的几种方法:
a) 如果我有源代码,我可以浏览项目文件夹结构并枚举 Areas 文件夹下的文件夹。但这并不能保证所有文件夹都代表区域,除非我还枚举了每个子文件夹下的 Controllers 和 Views 文件夹。如您所知,这种方法很糟糕。
b) 从二进制文件中,我可以枚举所有符合条件RootNamespaceOfProject.Areas.* 的命名空间。
或者,我相信还有更优雅的方式。在 ASP.NET MVC 框架中必须有一些字典来记录所有领域。
其次,在 MVC 框架中是否还有一个程序化构造来表示一个区域?我似乎找不到一个。只有四种结构与区域相关:
1. AreaRegistration
2. AreaRegistrationContext
3. IRouteWithArea
4. AreaHelpers (an internal class)
如果有,是否有可能枚举该区域内的所有控制器?
已编辑
我刚刚注意到文件夹 \Windows\Microsoft.NET\Framework\v4.x.x\Temporary ASP.NET Files\root\RandomlyGeneratedHash1\RandomlyGeneratedHash2\UserCache 中有一个名为 MVC-AreaRegistrationTypeCache.xml 的文件。
这个文件夹有两个文件:
a) MVC-AreaRegistrationTypeCache.xml:该文件列出了机器上所有程序集中有区域的所有区域。
b) MVC-ControllerTypeCache.xml:此文件列出程序集区域内的控制器。
现在,唯一需要确定的是是否有某种编程方式让 MVC 框架读取这些文件并告诉我二进制文件中是否存在某个区域。
我认为AreaRegistration 类可能就是其中之一。进一步探索它......
【问题讨论】:
-
这两个想法都不是双赢的解决方案,因为它们取决于您无法控制的东西!区域可以放置在项目结构中的任何位置,只要它们被注册和映射。
标签: asp.net-mvc-2 asp.net-mvc-areas