19

我有一个 ASP.NET MVC4 应用程序,我在其中创建多个区域,有没有一种方法可以以编程方式找出存在的区域数量及其名称。

4

2 回答 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 回答