Snippet MVC .NET C#: Liste des contrôleurs et actions par réflexion

Snippet MVC .NET C#: Liste des contrôleurs et actions par réflexion

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

namespace Tools.ControllerLister
{

public class ControllerLister
{
///

/// Retourne une liste des classes d’un type spécifié
///

/// Le type à lister
/// Liste de classes
private static List GetSubClasses()
{
return Assembly.GetCallingAssembly().GetTypes().Where(type => type.IsSubclassOf(typeof(T))).ToList();
}

///

/// Retourne une liste de string contenant les controleurs disponibles
///

/// Liste des noms de controleurs
public static List GetControllerNamesList()
{
List controllerNames = new List();
GetSubClasses().ForEach(type => controllerNames.Add(type.Name));
return controllerNames;
}

///

/// Retourne une liste de string contenant les actions d’un controleur spécifié
///

/// Le nom du controleur /// Liste des noms d’actions
public List GetActionNamesList(string controllerName)
{
var types =
from a in AppDomain.CurrentDomain.GetAssemblies()
from t in a.GetTypes()
where typeof(IController).IsAssignableFrom(t) &&
string.Equals(controllerName, t.Name, StringComparison.OrdinalIgnoreCase)
select t;

var controllerType = types.FirstOrDefault();

if (controllerType == null)
{
return Enumerable.Empty().ToList();
}
return new ReflectedControllerDescriptor(controllerType)
.GetCanonicalActions().Select(x => x.ActionName).Distinct()
.ToList();
}

///

/// Retourne un dictionaire contenant l’ensemble des Controleurs/Actions diponibles
///

/// Dictionnaire des contoleurs/actions
public Dictionary> GetControllersDictonary()
{
Dictionary> dicoControllers = new Dictionary>();

List controls = GetControllerNamesList();
foreach (string control in controls)
{
dicoControllers.Add(control, GetActionNamesList(control));
}

return dicoControllers;
}

public SelectList GetList()
{
List lstControllerItem = GetControllerNamesList();
/**** create parent_id dropdown list with opt-group ****/
List list_controllers = new List();
foreach (string aControllerName in lstControllerItem)
{
bool selected = false;
SelectListItem selectListItem = new SelectListItem() { Value = aControllerName, Text = aControllerName, Selected = selected };
list_controllers.Add(selectListItem);
}
SelectList select = new SelectList(lstControllerItem, »id », »name »);
return select;
}

///

/// Retourne une string json contenant l’ensemble des Controleurs/Actions diponibles
///

/// String json des noms de controleurs/actions
public string GetJsonString()
{
Dictionary> dict = GetControllersDictonary();
var jss = new JavaScriptSerializer();
var json = jss.Serialize(dict);
return json;
}
}

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.