.NET MVC:计算Web应用程序中的Action方法

时间:2013-03-07 22:36:02

标签: asp.net-mvc asp.net-mvc-3

我们有一个巨大的ASP.NET MVC 3应用程序。我们需要计算我们在currentClass is System.Web.Mvc.Controller

的类中有多少公共方法

任何符合此条件的类都将具有“AwesomeProduct.Web”的基本命名空间,但除了这些类可能属于哪个命名空间或者有多少深度级别之外,无法保证。

解决这个问题的最佳方法是什么?

1 个答案:

答案 0 :(得分: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();

这不适合异步控制器操作。