2012-05-16 18 views
6

Bir özniteliğin varlığını başka bir öznitelik kodu içinde test etmek mümkün mü? MyTestAttribute.IsValid RequiredAttribute Inception.Levels olup olmadığını belirlemek mümkün olduğunu ...Diğer Özniteliklerin Kodundan Öznitelikleri Test Etme

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

:

Eğer aşağıdaki sınıf tanımı var ki?

+0

Ooooh! İyi bir! Sanırım hayır, ama bu sadece bir tahmin. – zmbq

cevap

3

ValidationAttribute özel durumunda, ancak bir context parametresi olan diğer IsValid yüklenmesini kullanmanız gerekir. İçerik, içerik türünü almak ve ayrıca özniteliğin uygulandığı mülkün adını almak için kullanılabilir.

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