2016-09-10 1 views
0

J'ai implémenté mes validations en utilisant FluentValidation et Autofac.Valider la méthode de AbstractValidator n'est jamais appelée en utilisant ValidatorFactoryBase

Le CreateInstance est appelé, mais la méthode Valider de AbstractValidator n'est pas, donc mon modèle n'est pas validé en utilisant mes règles.

Mise au point: Dans CreateInstance, AbstractValidator correct est renvoyé.

Mais j'ai mis des points d'arrêt dans Validate et ne s'appelle pas.

Tout Ideia?

Mon code:

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 
    } 
} 

Répondre

0

Dans UsuarioCadastrarVM J'ai une propriété CargoId avec le type int

Le problème était CargoId est un entier, de sorte que le MVC n'est pas en mesure de lier mon poste à mon ViewModel, parce que dans mes tests j'ai envoyé une valeur vide, si j'envoie une valeur à CargoId ou change à nullable (int?) la validation fonctionne bien.