私はこのようなクラスバーを持っています:
class Foo : IFoo {
[Range(0,255)]
public int? FooProp {get; set}
}
class Bar : IFoo
{
private Foo foo = new Foo();
public int? FooProp { get { return foo.FooProp; }
set { foo.FooProp= value; } }
}
プロパティ Bar.FooProp のみを反映する属性 [Range(0,255)] を見つける必要があります。つまり、現在解析中のクラスではなく、クラスインスタンス (.. new Foo()) でプロップが装飾されています。Infact Bar.FooProp には属性がありません
編集
インターフェイスの定義で属性を移動したので、継承されたインターフェイスを解析してそれらを見つける必要があります。Bar クラスは IFoo を実装する必要があるため、これを行うことができます。この特定のケースでは、運が良かったのですが、インターフェイスがない場合は問題が残ります...次回のために注意します
foreach(PropertyInfo property in properties)
{
IList<Type> interfaces = property.ReflectedType.GetInterfaces();
IList<CustomAttributeData> attrList;
foreach(Type anInterface in interfaces)
{
IList<PropertyInfo> props = anInterface.GetProperties();
foreach(PropertyInfo prop in props)
{
if(prop.Name.Equals(property.Name))
{
attrList = CustomAttributeData.GetCustomAttributes(prop);
attributes = new StringBuilder();
foreach(CustomAttributeData attrData in attrList)
{
attributes.AppendFormat(ATTR_FORMAT,
GetCustomAttributeFromType(prop));
}
}
}
}