.NET CORE列出属性的属性

时间:2018-11-15 08:30:18

标签: asp.net

我有多个使用此自定义属性的类。它们都实现相同的接口,并且都具有此自定义属性并具有不同的名称

public class NameAttribute : Attribute
{
    public NameAttribute(string name)
    {
        this.Name = name;
    }

    public string Name { get; }
}

是否可以在控制器中返回这些名称的列表?

1 个答案:

答案 0 :(得分:0)

如果将来有人遇到相同的问题,我将回答我自己的问题。这就是我所做的:

        IEnumerable<Type> types = typeof(Startup).Assembly.ExportedTypes
            .Where(type => type.IsClass && !type.IsAbstract)
            .Where(type => type.GetInterface("IName") != null)
            .Where(type => type.GetCustomAttribute<NameAttribute>() != null);

        List<string> rules = new List<string>();

        foreach (Type t in types)
        {
            rules.Add(t.GetCustomAttribute<NameAttribute>().Name);
        } 

基本上发生的是,我寻找所有实现了名为“ IName”的接口并具有“ NameAttribute”属性的导出类型。这将返回带有类型的可枚举列表。

接下来,可以检索自定义属性并将名称放入数组列表中。