6

別の属性のコード内の属性の存在をテストすることは可能ですか?

次のクラス定義があるとします。

public class Inception {
    [Required]
    [MyTest]
    public int Levels { get; set; }
}
public class MyTestAttribute : ValidationAttribute {
    public override bool IsValid(object o){
        // return whether the property on which this attribute
        // is applied also has the RequiredAttribute
    }
}

... MyTestAttribute.IsValid が Inception.Levels に RequiredAttribute があるかどうかを判断することは可能ですか?

4

1 に答える 1

3

a の特定のケースでValidationAttributeは可能ですIsValidが、コンテキスト パラメーターを持つ他のオーバーロードを使用する必要があります。コンテキストを使用して、含まれている型を取得したり、属性が適用されるプロパティの名前を取得したりできます。

protected override ValidationResult IsValid(object value, 
  ValidationContext validationContext)
{
  var requiredAttribute = validationContext.ObjectType
    .GetPropery(validationContext.MemberName)
    .GetCustomAttributes(true).OfType<RequiredAttribute>().SingleOrDefault();
}
于 2012-05-16T19:36:27.517 に答える