2013-03-28 32 views

Trả lời

30

AreaRegistration.RegisterAllAreas(); đăng ký từng tuyến đường khu vực với DataTokens["area"] trong đó giá trị là tên của khu vực.

Vì vậy, bạn có thể nhận được những cái tên khu vực đăng ký từ RouteTable

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

Nếu bạn đang tìm kiếm các AreaRegistration bản thân bạn có thể sử dụng phản ánh để có được loại này xuất phát từ AreaRegistration trong assambly của bạn.

+0

Cảm ơn bạn đã trả lời nhanh – dev

0

AreaRegistration.RegisterAllAreas() không thể sử dụng trước khi khởi tạo ứng dụng web. Tuy nhiên, nếu bạn muốn nhận các khu vực mà không cần gọi số RegisterAllAreas(), ví dụ: trong kiểm tra tự động, sau đó mã sau đây có thể hữu ích:

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

Lưu ý rằng MvcApplication là lớp có nguồn gốc từ HttpApplication. Bạn có thể sử dụng bất kỳ tên lớp nào miễn là lớp đó nằm trong cùng một assembly như các đăng ký lắp ráp, tức là các lớp bắt nguồn từ AreaRegistration. Nếu bạn đã chia nhỏ ứng dụng của mình với các vùng trong nhiều hơn một assembly, thì bạn cần phải thích ứng với mã này sao cho nó tìm kiếm tất cả các assembly đó.

Các vấn đề liên quan