4

巨大な ASP.NET MVC 3 アプリケーションがあります。クラス内にあるパブリック メソッドの数を数える必要があり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 に答える