我們有一個巨大的ASP.NET MVC 3應用程序。我們需要計算在currentClass is System.Web.Mvc.Controller
的課程中有多少公共方法。.NET MVC:計算Web應用程序中的動作方法
符合此條件的任何類都將具有「AwesomeProduct.Web」的基本名稱空間,但除了可能屬於這些類的名稱空間或深度級別以外,沒有任何保證。
解決這個問題的最佳方法是什麼?
我們有一個巨大的ASP.NET MVC 3應用程序。我們需要計算在currentClass is System.Web.Mvc.Controller
的課程中有多少公共方法。.NET MVC:計算Web應用程序中的動作方法
符合此條件的任何類都將具有「AwesomeProduct.Web」的基本名稱空間,但除了可能屬於這些類的名稱空間或深度級別以外,沒有任何保證。
解決這個問題的最佳方法是什麼?
一些反思和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();
這並不滿足異步控制器操作。
哇。非常令人印象深刻。 – core 2013-03-07 23:25:08
沒有probs,高興地幫助:) – 2013-03-07 23:37:36
我想象一下反射的一些用法將是你最好的選擇。從這裏開始:http://stackoverflow.com/a/79738/74757。然後通過集合類類型,您可以再次使用反射來獲取公共方法。您可以更進一步並檢查是否有任何'NonActionAttribute'屬性。 – 2013-03-07 22:37:19