c#-4.0 - tutorial - teacher asp mvc
ASP.NET MVC4 Lista de todas las áreas (2)
Tengo una aplicación MVC4 de ASP.NET en la que estoy creando múltiples áreas, ¿hay alguna manera de averiguar mediante programación la cantidad de áreas presentes y sus nombres?
AreaRegistration.RegisterAllAreas()
no se puede usar antes de la inicialización de la aplicación web. Sin embargo, si desea obtener las áreas sin llamar a RegisterAllAreas()
, por ejemplo, en una prueba automatizada, el siguiente código puede ser útil:
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);
}
Tenga en cuenta que MvcApplication
es la clase derivada de HttpApplication
. Puede usar cualquier nombre de clase siempre que esa clase esté en el mismo ensamblaje que los registros de ensamblaje, es decir, las clases derivadas de AreaRegistration
. Si ha dividido su aplicación con áreas en más de un ensamblaje, entonces deberá adaptar este código en consecuencia para que busque todos esos ensamblajes.
El AreaRegistration.RegisterAllAreas();
registra cada ruta de área con los DataTokens["area"]
donde el valor es el nombre del área.
Para que pueda obtener los nombres de las RouteTable
registradas de la RouteTable
var areaNames = RouteTable.Routes.OfType<Route>()
.Where(d => d.DataTokens != null && d.DataTokens.ContainsKey("area"))
.Select(r => r.DataTokens["area"]).ToArray();
Si está buscando el AreaRegistration
, puede utilizar la reflexión para obtener los tipos que se derivan del AreaRegistration
en su conjunto.