Обертка для проверки флюентвалидации — Валидатора

#c# #validation #fluentvalidation

Вопрос:

У меня есть файл для основных валидаторов, таких как GuidValidator , GreaterThanZeroValidator LessThanOrEqualToZeroValidator , и т. Д. Я хотел бы создать вызываемый валидатор NullCheckValidator , который принимал бы другой валидатор в качестве параметра, но выполнял бы проверку на нуль определенного типа во время проверки .When() .

Что мне нужно сделать, чтобы иметь NullCheckValidators, в которые я могу передать любой из моих базовых валидаторов, чтобы они проверялись на нуль перед выполнением базового валидатора? В принципе, я хочу добавить оболочку, которая будет прикреплять .When() инструкцию проверки к уже существующему базовому валидатору.

Например:

 // Basic Validator
public class GreaterThanZeroValidator : AbstractValidator<int>
{
    public GreaterThanZeroValidator()
    {
        RuleFor(value => value)
            .GreaterThan(0)
            .WithMessage("Must be greater than 0");
    }
}

// Pseudo-code for NullCheckValidator
public class NullCheckValidator : AbstractValidator<int?>
{
    public NullCheckValidator(AbstractValidator<int> validator) // validator would be something like GreaterThanZeroValidator
    {
        RuleFor(value => value)
            .When(value => value.HasValue)
            .SomewayToCombineValidators(validator)
    }
}
 

Комментарии:

1. RuleFor(value => value.Value).SetInheritanceValidator(v => v.Add(validator)); … Кстати, вы не можете пройти мимо (int?)null , чтобы Validator.Validate(...)