检查不同的验证属性并做出合乎逻辑的决定?
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;
}
}
我想达到以下目的,但似乎不可能:
[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;
}
}