2012-05-16 33 views
6

Có thể kiểm tra sự tồn tại của một thuộc tính trong mã của thuộc tính khác không?Thử nghiệm cho các thuộc tính từ bên trong mã của các thuộc tính khác

Giả sử bạn có định nghĩa lớp sau đây:

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

... là nó có thể cho MyTestAttribute.IsValid để xác định xem Inception.Levels có RequiredAttribute?

+0

Ooooh! Tốt nhất! Tôi đoán không, nhưng nó chỉ là một đoán. – zmbq

Trả lời

3

Trong trường hợp cụ thể của ValidationAttribute có thể, nhưng bạn phải sử dụng quá tải IsValid khác có thông số ngữ cảnh. Ngữ cảnh có thể được sử dụng để lấy kiểu có chứa và cũng lấy tên của thuộc tính mà thuộc tính được áp dụng.

protected override ValidationResult IsValid(object value, 
    ValidationContext validationContext) 
{ 
    var requiredAttribute = validationContext.ObjectType 
    .GetPropery(validationContext.MemberName) 
    .GetCustomAttributes(true).OfType<RequiredAttribute>().SingleOrDefault(); 
} 
Các vấn đề liên quan