4

我们有一个巨大的 ASP.NET MVC 3 应用程序。我们需要计算在 where 类中有多少公共方法currentClass is System.Web.Mvc.Controller

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

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

4

1 回答 1

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

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

于 2013-03-07T23:05:10.860 回答