MVC'de Controller açıklamaları eklemek ve bu açıklamaları listelemek

Controller adının üzerine Description attribute ekliyoruz:

[Description("Benim Çok Çalışan Kontrollerim")]
public class MyController : Controller
{
}

ardından uygulamamızdaki tüm controller’leri ve içlerindeki metodları listelemek için aşağıdaki fonksiyonu kullanabiliriz:
 

Assembly assembly = Assembly.GetExecutingAssembly();
IEnumerable<type> types = assembly.GetTypes().Where(type =&gt; typeof(Controller).IsAssignableFrom(type)).OrderBy(x =&gt; x.Name);
List<selectlistitem> _controllers = new List<selectlistitem>();
List<selectlistitem> _methods = new List<selectlistitem>();
foreach (Type cls in types)
{
	AttributeCollection attributes =TypeDescriptor.GetProperties(this)[cls.Name].Attributes;
	DescriptionAttribute myAttribute = (DescriptionAttribute)attributes[typeof(DescriptionAttribute)];
	_controllers.Add(new SelectListItem() { Text= myAttribute.Description, Value= cls.Name.Replace("Controller", "") });
	IEnumerable<memberinfo> memberInfo = cls.GetMethods(BindingFlags.Instance | BindingFlags.DeclaredOnly | BindingFlags.Public).Where(m =&gt; !m.GetCustomAttributes(typeof(System.Runtime.CompilerServices.CompilerGeneratedAttribute), true).Any()).OrderBy(x =&gt; x.Name);
	foreach (MemberInfo method in memberInfo)
	{
		if (method.ReflectedType.IsPublic &amp;&amp; !method.IsDefined(typeof(NonActionAttribute)))
		{
			_methods.Add(new SelectListItem() { Text=method.Name.ToString() });
		}
	}
}
</memberinfo></selectlistitem></selectlistitem></selectlistitem></selectlistitem></type>

Yorum yaz