2016-09-10 4 views
0

FluentValidationとAutofacを使用して検証を実装しました。ValidatorFactoryBaseを使用してAbstractValidatorのValidateメソッドが呼び出されることはありません

CreateInstanceが呼び出されますが、メソッドはAbstractValidatorの検証ではありません。したがって、私のモデルは私のルールを使用して検証されません。

デバッグ: CreateInstanceには、正しいAbstractValidatorが返されます。

しかし、私はValidateにブレークポイントを置き、呼び出されません。

Ideia?

マイコード:

MVCは私のViewModelに私のポストを結合することができないので、私は、タイプ int

問題が CargoId

整数であるとの性質CargoIdを持ってUsuarioCadastrarVM

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

、私のテストでは空値を送ったので、CargoIdに値を送信するか、nullable(int?)に変更すると検証がうまく動作するからです。

関連する問題