2016-09-10 2 views
0

Я выполнил мои проверки с использованием FluentValidation и Autofac.Validate метод AbstractValidator никогда не вызывается с использованием ValidatorFactoryBase

Вызывается CreateInstance, но метод Validate of AbstractValidator отсутствует, поэтому моя модель не проверяется с использованием моих правил.

Отладка: В 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 
    } 
} 

ответ

0

В UsuarioCadastrarVM У меня есть свойство CargoId с типом int

Проблема была CargoId является целым числом, поэтому MVC не в состоянии связать свой пост с моим ViewModel, потому что в моих тестах я отправил пустое значение, если я отправлю значение на CargoId или изменив на NULL (int?), валидация работает хорошо.

Смежные вопросы