У меня есть приложение ASP.NET MVC4, в котором я создаю несколько областей, есть ли способ, который я могу программно определить количество областей, которые присутствуют, и их имена.
ASP.NET MVC4 Список всех областей
Ответ 1
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
в вашем assambly.
Ответ 2
AreaRegistration.RegisterAllAreas()
не может использоваться для предварительной инициализации веб-приложения. Однако, если вы хотите получить области без вызова 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
. Если вы разделили приложение с областями более чем на одну сборку, вам нужно будет соответствующим образом адаптировать этот код, чтобы он просматривал все эти сборки.