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
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.
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.
Danke für die schnelle Antwort – dev