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