检查不同的验证属性并做出合乎逻辑的决定?

check different ValidationAttributes and make a logical decision?

我想达到以下目的,但似乎不可能:

[genericValidation  || specificValidation]
public int content{ get; set; }

我不想融合这两个验证,因为在程序的多个地方使用了 genericValidation(其他 classes),并且每个 specificValidation 都必须是 copy/pasted。 specific 仅特定于此 class 所以我试图将 specific 和 generic 分开。

我想避免将通用的内容复制粘贴到每个特定的验证中。鉴于此 generic/specific "OR" 发生在几个 classes.

有什么办法可以实现吗?

您可以创建 SpecificValidationAttribute 并从 GenericValidationAttribute 继承它。例如

    public class GenericValidationAttribute: ValidationAttribute
    {
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            var obj = validationContext.ObjectInstance as IBaseObject;
            if(obj == null) return ValidationResult.Success;
            if(obj.content < 0)
               return new ValidationResult("Content have to be greater than zero!");
             return ValidationResult.Success;
        }
   }

    public class SpecificValidationAttribute: GenericValidationAttribute
    {
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            var res = base.IsValid(value, validationContext);
            if(res != ValidationResult.Success) return res;

            // Do some specific validation
            // ---- 
            return ValidationResult.Success;
        }
    }