2013-03-28 20 views

risposta

30

Il AreaRegistration.RegisterAllAreas(); registra ogni percorso di area con DataTokens["area"] dove il valore è il nome dell'area.

modo da poter ottenere i nomi delle aree registrate dal RouteTable

var areaNames = RouteTable.Routes.OfType<Route>() 
    .Where(d => d.DataTokens != null && d.DataTokens.ContainsKey("area")) 
    .Select(r => r.DataTokens["area"]).ToArray(); 

Se siete alla ricerca per il AreaRegistration se stessi è possibile utilizzare la reflection per ottenere tipi che deriva dal AreaRegistration nel vostro assambly.

+0

Grazie per la risposta rapida – dev

0

AreaRegistration.RegisterAllAreas() non può essere utilizzato prima dell'inizializzazione dell'applicazione Web. Tuttavia, se si desidera ottenere le aree senza chiamare RegisterAllAreas(), ad es. in un test automatico, quindi il seguente codice può essere utile:

 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); 
    } 

Nota che MvcApplication è la classe derivata da HttpApplication. È possibile utilizzare qualsiasi nome classe purché tale classe si trovi nello stesso assembly delle registrazioni assembly, ovvero le classi derivate da AreaRegistration. Se hai diviso la tua applicazione con aree in più di un assembly, allora dovresti adattare questo codice di conseguenza, in modo da cercare tutti quegli assembly.