永远不会使用ValidatorFactoryBase调用AbstractValidator的Validate方法

本文关键字:AbstractValidator Validate 方法 调用 ValidatorFactoryBase 永远 | 更新日期: 2023-09-27 18:06:32

我使用FluentValidation和Autofac实现了我的验证。

调用了CreateInstance,但是没有调用AbstractValidator的Validate方法,因此我的模型没有使用我的规则进行验证。

调试:在CreateInstance中,返回正确的AbstractValidator。

但是我在Validate中放置了断点,而不是调用。

的念头吗?

我代码:

public class AutofacValidatorFactory : ValidatorFactoryBase
{
    private readonly IComponentContext _context;
    public AutofacValidatorFactory(IComponentContext context)
    {
        _context = context;
    }
    public override IValidator CreateInstance(Type validatorType)
    {
        object instance;
        if (_context.TryResolve(validatorType, out instance))
        {
            var validator = instance as IValidator;
            return validator; //UsuarioCadastrarValidator is returned 
        }
        return null;
    }
}
public class UsuarioCadastrarValidator : AbstractValidator<UsuarioCadastrarVM>
{
    public UsuarioCadastrarValidator()
    {
        RuleFor(a => a.Nome).NotEmpty();
        RuleFor(a => a.Nome).Length(4, 200);
        ...
    }
    public override ValidationResult Validate(UsuarioCadastrarVM instance)
    {
        return base.Validate(instance); //breakpoint here not is called
    }
    public override IValidatorDescriptor CreateDescriptor()
    {
        return base.CreateDescriptor(); //breakpoint here IS called
    }
    public override ValidationResult Validate(ValidationContext<UsuarioCadastrarVM> context)
    {
        return base.Validate(context); //breakpoint here not is called
    }
    public override Task<ValidationResult> ValidateAsync(ValidationContext<UsuarioCadastrarVM> context, CancellationToken cancellation = default(CancellationToken))
    {
        return base.ValidateAsync(context, cancellation); //breakpoint here not is called
    }
}

永远不会使用ValidatorFactoryBase调用AbstractValidator的Validate方法

UsuarioCadastrarVM中,我有一个类型为int的属性CargoId

问题是CargoId是一个整数,所以MVC不能将我的帖子绑定到我的ViewModel,因为在我的测试中,我发送了一个空值,如果我发送一个值到CargoId或更改为可空(int?)验证工作得很好。

相关文章:
  • 没有找到相关文章