Наследование атрибута и отражение

Я создал пользовательский атрибут для украшения многих классов, для которых я хочу запросить во времени выполнения:

[AttributeUsage(AttributeTargets.Class, AllowMultiple=false, Inherited=true)]
public class ExampleAttribute : Attribute
{
    public ExampleAttribute(string name)
    {
        this.Name = name;
    }

    public string Name
    {
        get;
        private set;
    }
}

Каждый из этих классов происходит из абстрактного базового класса:

[Example("BaseExample")]
public abstract class ExampleContentControl : UserControl
{
    // class contents here
}

public class DerivedControl : ExampleContentControl
{
    // class contents here
}

Я должен поместить этот атрибут на каждый производный класс, даже если я добавляю его к базовому классу? Атрибут отмечен как наследуемый, но когда я делаю запрос, я только вижу базовый класс а не производные классы.

От другого потока:

var typesWithMyAttribute = 
    from a in AppDomain.CurrentDomain.GetAssemblies()
    from t in a.GetTypes()
    let attributes = t.GetCustomAttributes(typeof(ExampleAttribute), true)
    where attributes != null && attributes.Length > 0
    select new { Type = t, Attributes = attributes.Cast() };

Спасибо, wTs

6
задан Community 23 May 2017 в 12:14
поделиться