2013-03-28 3 views
17

Ich habe eine ASP.NET MVC4-Anwendung, in der ich mehrere Bereiche erstellen, gibt es eine Möglichkeit, ich kann die Anzahl der Bereiche, die vorhanden sind und ihre Namen programmgesteuert herausfinden.ASP.NET MVC4 Liste aller Bereiche

Antwort

30

Die AreaRegistration.RegisterAllAreas(); registriert jede Bereichsroute mit der DataTokens["area"], wobei der Wert der Name des Bereichs ist.

So können Sie die registrierten Bereichsnamen aus der RouteTable

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

bekommen Wenn Sie die AreaRegistration selbst suchen Sie Reflektion verwenden können Typen zu erhalten, die von AreaRegistration in Ihrem Assambly ableitet.

+0

Danke für die schnelle Antwort – dev

0

AreaRegistration.RegisterAllAreas() kann nicht vor der Initialisierung der Webanwendung verwendet werden. Wenn Sie jedoch die Bereiche ohne Aufruf von RegisterAllAreas() abrufen möchten, z. in einem automatisierten Test, kann der folgende Code hilfreich sein:

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

Beachten Sie, dass MvcApplication die Klasse von HttpApplication abgeleitet ist. Sie können einen beliebigen Klassennamen verwenden, solange sich diese Klasse in derselben Assembly befindet wie die Assembly-Registrierungen, d. H. Die von AreaRegistration abgeleiteten Klassen. Wenn Sie Ihre Anwendung in Bereiche in mehr als einer Baugruppe aufgeteilt haben, müssen Sie diesen Code entsprechend anpassen, damit alle Baugruppen durchsucht werden.