web-dev-qa-db-ja.com

ASP.NETMVCはプログラムでコントローラーのリストを取得します

ASP.NET MVCで、コードを介してコントローラーを列挙し、それらの名前を取得する方法はありますか?

例:

AccountController
HomeController
PersonController

次のようなリストが表示されます。

Account, Home, Person
31

アセンブリを反映して、System.Web.MVC.Controller型から継承するすべてのクラスを見つけることができます。これを行う方法を示すサンプルコードを次に示します。

http://mvcsitemap.codeplex.com/WorkItem/View.aspx?WorkItemId=1567

12
Jon Galloway

アセンブリを反映するというJonの提案 を使用して、次のスニペットが役立つ場合があります。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Web.Mvc;

public class MvcHelper
{
    private static List<Type> GetSubClasses<T>()
    {
        return Assembly.GetCallingAssembly().GetTypes().Where(
            type => type.IsSubclassOf(typeof(T))).ToList();
    }

    public List<string> GetControllerNames()
    {
        List<string> controllerNames = new List<string>();
        GetSubClasses<Controller>().ForEach(
            type => controllerNames.Add(type.Name));
        return controllerNames;
    }
}
43
grenade

この投稿を使用するすべての人は、前にこの投稿をよく読んでください: Assembly.GetCallingAssembly()を使用しても、呼び出し元のアセンブリは返されません

問題は、かみそりビューが独立した動的アセンブリとして機能していて、目的のアセンブリが得られないことです。

ヤイル

0
Yair Nevet