永远不会使用 ValidatorFactoryBase 调用 AbstractValidator 的验证方法
Validate method of AbstractValidator never is called using ValidatorFactoryBase
我使用 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
}
}
在 UsuarioCadastrarVM
我有一个 属性 CargoId
类型 int
问题是 CargoId
是一个整数,所以 MVC
无法将我的 post 绑定到我的 ViewModel,因为在我的测试中我发送了一个空值,如果我将值发送到 CargoId
或更改为可为空 (int?
),验证效果很好。
我使用 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
}
}
在 UsuarioCadastrarVM
我有一个 属性 CargoId
类型 int
问题是 CargoId
是一个整数,所以 MVC
无法将我的 post 绑定到我的 ViewModel,因为在我的测试中我发送了一个空值,如果我将值发送到 CargoId
或更改为可为空 (int?
),验证效果很好。