2013-03-07 29 views
4

我們有一個巨大的ASP.NET MVC 3應用程序。我們需要計算在currentClass is System.Web.Mvc.Controller的課程中有多少公共方法。.NET MVC:計算Web應用程序中的動作方法

符合此條件的任何類都將具有「AwesomeProduct.Web」的基本名稱空間,但除了可能屬於這些類的名稱空間或深度級別以外,沒有任何保證。

解決這個問題的最佳方法是什麼?

+1

我想象一下反射的一些用法將是你最好的選擇。從這裏開始:http://stackoverflow.com/a/79738/74757。然後通過集合類類型,您可以再次使用反射來獲取公共方法。您可以更進一步並檢查是否有任何'NonActionAttribute'屬性。 – 2013-03-07 22:37:19

回答

10

一些反思和LINQ這應該做到這一點

var actionCount = typeof(/*Some Controller Type In Your MVC App*/) 
        .Assembly.GetTypes() 
        .Where(t => typeof(Controller).IsAssignableFrom(t)) 
        .Where(t => t.Namespace.StartsWith("AwesomeProduct.Web")) 
        .SelectMany(t => t.GetMethods(BindingFlags.Public | BindingFlags.Instance)) 
        .Where(m => typeof(ActionResult).IsAssignableFrom(m.ReturnType)) 
        .Where(m => !m.IsAbstract) 
        .Where(m => m.GetCustomAttribute<NonActionAttribute>() == null) 
        .Count(); 

這並不滿足異步控制器操作。

+0

哇。非常令人印象深刻。 – core 2013-03-07 23:25:08

+0

沒有probs,高興地幫助:) – 2013-03-07 23:37:36

相關問題