2012-05-16 14 views
6

E 'possibile verificare l'esistenza di un attributo all'interno del codice di un altro attributo?di prova per gli attributi all'interno del codice di altri attributi

Diciamo che avete la seguente definizione di classe:

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

... è possibile per MyTestAttribute.IsValid per determinare se ha l'Inception.Levels RequiredAttribute?

+0

Ooooh! Bene! Sto indovinando no, ma è solo una supposizione. – zmbq

risposta

3

Nel caso specifico di ValidationAttribute è possibile, ma è necessario utilizzare l'altro sovraccarico IsValid con un parametro di contesto. Il contesto può essere utilizzato per ottenere il tipo di contenimento e anche ottenere il nome della proprietà che l'attributo viene applicato.

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