我有多个使用此自定义属性的类。它们都实现相同的接口,并且都具有此自定义属性并具有不同的名称
public class NameAttribute : Attribute
{
public NameAttribute(string name)
{
this.Name = name;
}
public string Name { get; }
}
是否可以在控制器中返回这些名称的列表?
答案 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”属性的导出类型。这将返回带有类型的可枚举列表。
接下来,可以检索自定义属性并将名称放入数组列表中。