ASP.NET MVC obtiene programáticamente una lista de controladores

En ASP.NET MVC, ¿hay alguna manera de enumerar los controladores a través del código y obtener su nombre?

ejemplo:

AccountController HomeController PersonController 

me daría una lista como:

 Account, Home, Person 

Puede reflejar a través de su conjunto y encontrar todas las clases que heredan de tipo System.Web.MVC.Controller. Aquí hay un código de muestra que muestra cómo puedes hacer eso:

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

Usando la sugerencia de Jon de reflejar a través del ensamblado , aquí hay un fragmento que puede ser útil:

 using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Web.Mvc; public class MvcHelper { private static List GetSubClasses() { return Assembly.GetCallingAssembly().GetTypes().Where( type => type.IsSubclassOf(typeof(T))).ToList(); } public List GetControllerNames() { List controllerNames = new List(); GetSubClasses().ForEach( type => controllerNames.Add(type.Name)); return controllerNames; } } 

Todos los que usan esta publicación, mejor lean esta publicación antes: usar Assembly.GetCallingAssembly () no devuelve el ensamblado de la llamada

El problema es que las vistas de la maquinilla de afeitar actúan como ensambles dynamics independientes y no se obtiene el ensamblaje deseado.

Yair

Crea la propiedad en cada controlador y luego obtienes el nombre así.