【问题标题】:.NET MVC: Counting Action methods in web application.NET MVC:计算 Web 应用程序中的操作方法
【发布时间】:2013-02-23 08:35:14
【问题描述】:
我们有一个巨大的 ASP.NET MVC 3 应用程序。我们需要计算在currentClass is System.Web.Mvc.Controller 所在的类中有多少公共方法。
任何满足此条件的类都将具有“AwesomeProduct.Web”的基本命名空间,但除了这些类可能属于哪个命名空间或有多少深度级别之外,无法保证。
解决这个问题的最佳方法是什么?
【问题讨论】:
标签:
asp.net-mvc
asp.net-mvc-3
【解决方案1】:
像这样的一些反射和 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();
这不适用于异步控制器操作。