2012-05-16 10 views
6

Ist es möglich, das Vorhandensein eines Attributs innerhalb des Codes eines anderen Attributs zu testen?Test für Attribute aus dem Code anderer Attribute

Sagen Sie bitte die folgende Klassendefinition haben:

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 
    } 
} 

... ist es möglich, MyTestAttribute.IsValid zu bestimmen, ob Inception.Levels die RequiredAttribute hat?

+0

Ooooh! Gute! Ich vermute nein, aber es ist nur eine Vermutung. – zmbq

Antwort

3

Im speziellen Fall eines ValidationAttribute ist es möglich, aber Sie müssen die andere IsValid Überladung verwenden, die einen Kontextparameter hat. Der Kontext kann verwendet werden, um den enthaltenden Typ abzurufen und auch den Namen der Eigenschaft abzurufen, auf die das Attribut angewendet wird.

protected override ValidationResult IsValid(object value, 
    ValidationContext validationContext) 
{ 
    var requiredAttribute = validationContext.ObjectType 
    .GetPropery(validationContext.MemberName) 
    .GetCustomAttributes(true).OfType<RequiredAttribute>().SingleOrDefault(); 
}