2012-05-16 12 views
6

¿Es posible probar la existencia de un atributo dentro del código de otro atributo?Prueba de atributos dentro del código de otros atributos

Digamos que tiene la siguiente definición de clase:

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

... es posible que MyTestAttribute.IsValid para determinar si tiene la Inception.Levels RequiredAttribute?

+0

Ooooh! ¡Bien! Supongo que no, pero es solo una suposición. – zmbq

Respuesta

3

En el caso específico de ValidationAttribute es posible, pero tiene que usar la otra sobrecarga IsValid que tiene un parámetro de contexto. El contexto se puede usar para obtener el tipo contenedor y también obtener el nombre de la propiedad a la que se aplica el atributo.

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