31 votes

ASP.NET MVC Obtenir par programme une liste de contrôleurs

Dans ASP.NET MVC, existe-t-il un moyen d'énumérer les contrôleurs via le code et d'obtenir leur nom?

exemple:

 AccountController
HomeController
PersonController
 

me donnerait une liste telle que:

 Account, Home, Person
 

44voto

grenade Points 10089

En utilisant la suggestion de Jon de réfléchir à travers l'assemblage , voici un extrait que vous pouvez trouver utile:

 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;
    }
}
 

12voto

Jon Galloway Points 28243

Vous pouvez réfléchir à travers votre assembly et trouver toutes les classes qui héritent du type System.Web.MVC.Controller. Voici un exemple de code qui montre comment vous pouvez le faire:

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

1voto

Essaye ça

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

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

0voto

Yair Nevet Points 5497

Tous ceux qui utilisent ce message lisent mieux ce message avant: l' utilisation de Assembly.GetCallingAssembly () ne renvoie pas l'assembly appelant

Le problème est que les vues de rasoir agissent comme des assemblages dynamiques indépendants et que vous n'obtenez pas l'assemblage souhaité.

Yair

-1voto

KuldipMCA Points 864

Créez la propriété dans chaque contrôleur et vous obtenez le nom comme ceci.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X