2016-09-10 24 views
0

我實現使用FluentValidation和Autofac我叫驗證。驗證方法從不使用ValidatorFactoryBase

CreateInstance被調用,但該方法驗證AbstractValidator的沒有,所以我的模型不就是驗證使用我的規則。

調試: 在CreateInstance中返回正確的AbstractValidator。

但我把斷點Validate,而不是被調用。

任何IDEIA?

我的代碼:

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我有一個屬性CargoIdint

問題是CargoId是一個整數類型,所以MVC不能我的帖子綁定到我的視圖模型,因爲在我的測試中,我sended一個空值,如果我一值發送給CargoId或更改可空(int?)驗證效果很好。