【问题标题】:ASP.NET MVC Find class by class attribute value using ReflectionASP.NET MVC 使用反射按类属性值查找类
【发布时间】:2014-08-05 14:00:41
【问题描述】:

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

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

}

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

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

我该怎么做?

【问题讨论】:

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


    【解决方案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 加载它,但不推荐。

    【讨论】:

    • 它似乎部分工作。它从命名空间A.B.C 中找到我的所有类,但找不到来自A.Controllers 的类。知道为什么吗?我在想必须手动加载程序集,但我不知道该怎么做。
    • 我刚刚尝试在控制器中不包含的另一个命名空间中的类上应用属性并且它可以工作......但是,我仍然无法在控制器上应用它
    • 我刚刚发现了问题。我做错了什么。通过使用 Sriram 提供的一段代码,它适用于类,但在我的控制器中,我将属性应用于方法,所以这就是它部分工作的原因。
    • @tzortzik 手动加载不是一个好主意。你可能会得到你的answer here
    • @tzortzik 很高兴您发现了这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    • 2014-04-13
    • 2014-10-25
    • 1970-01-01
    相关资源
    最近更新 更多