我们有一个巨大的 ASP.NET MVC 3 应用程序。我们需要计算在 where 类中有多少公共方法currentClass is System.Web.Mvc.Controller
。
任何符合此标准的类都将具有“AwesomeProduct.Web”的基本命名空间,但除了这些类可能属于哪个命名空间或有多少深度级别之外,无法保证。
解决这个问题的最佳方法是什么?
我们有一个巨大的 ASP.NET MVC 3 应用程序。我们需要计算在 where 类中有多少公共方法currentClass is System.Web.Mvc.Controller
。
任何符合此标准的类都将具有“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();
这不适合异步控制器操作。