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