我有一个 ASP.NET MVC4 应用程序,我在其中创建多个区域,有没有一种方法可以以编程方式找出存在的区域数量及其名称。
问问题
4358 次
2 回答
32
用其中的值是区域的名称来AreaRegistration.RegisterAllAreas();
注册每个区域路由。DataTokens["area"]
所以你可以从RouteTable
var areaNames = RouteTable.Routes.OfType<Route>()
.Where(d => d.DataTokens != null && d.DataTokens.ContainsKey("area"))
.Select(r => r.DataTokens["area"]).ToArray();
如果您正在寻找AreaRegistration
自己,您可以使用反射来获取从AreaRegistration
您的组件中派生的类型。
于 2013-03-28T20:49:55.813 回答
0
AreaRegistration.RegisterAllAreas()
不能用于 Web 应用程序的预初始化。但是,如果您想在不调用 的情况下获得这些区域RegisterAllAreas()
,例如在自动化测试中,那么以下代码可能会有所帮助:
var areaNames = new List<string>();
foreach (var type in typeof(MvcApplication).Assembly.GetTypes().Where(t => t.IsSubclassOf(typeof(AreaRegistration)))) {
var areaRegistration = Activator.CreateInstance(type) as AreaRegistration;
areaNames.Add(areaRegistration.AreaName);
}
请注意,这MvcApplication
是派生自HttpApplication
. 您可以使用任何类名,只要该类与程序集注册在同一个程序集中,即从AreaRegistration
. 如果您将应用程序与多个程序集中的区域分开,那么您需要相应地调整此代码,以便搜索所有这些程序集。
于 2017-07-17T05:20:15.617 回答