ASP.NET MVC使用Reflection按类属性值查找类

时间:2014-08-05 14:00:42

标签: c# asp.net asp.net-mvc reflection attributes

我有一个具有自定义属性的类,该属性具有字符串参数。

[ANAttribute("Ampe21")]
public class ClassB : ClassA
{

}

我为不同的类定义了不同的动作名称。

我想要的是通过在ClassB之后搜索整个应用程序来获取ClassB的命名空间或获取Ampe21的类型。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

您可以像这样搜索所有已加载的程序集:

var types = AppDomain.CurrentDomain.GetAssemblies()
    .SelectMany
    (x => x.GetTypes()
        .Where(t => t.GetCustomAttribute<ANAttribute>() != null &&
                    t.GetCustomAttribute<ANAttribute>().YourProperty == "Ampe21")
    );

foreach (var type in types)
{
    Console.WriteLine(type.Namespace);
}

您可以通过引入局部变量来避免两次调用GetCustomAttribute

如果尚未加载程序集,则会跳过程序集。您可以使用Assembly.Load加载它,但不建议使用。