使用FluentValidation和Autofac注册通用验证器

问题描述 投票:0回答:1

我有一个通用类,以相同的方式处理不同的实体。我正在尝试在此通用类中实现Validator,Validator类型应根据通用类型而变化。例如,如果类型为Person,则PersonValidator应该被初始化。使用FluentValidation和Autofac怎么可能?我已经使用通用BaseValidator进行了尝试,但似乎无法正确注册它,因此不会调用PersonValidator。

通用类

var validator = new BaseValidator<TEntity>(); // TEntity = Person
await validator.ValidateAndThrowAsync(person);

BaseValidator

public class BaseValidator<TEntity> : AbstractValidator<TEntity>
{
}

PersonValidator

public class PersonValidator : BaseValidator<Person>
{
    public PersonValidator()
    {
        RuleFor(x => x.Name).NotEmpty();
    }
}

我尝试过的Autofac注册

 builder.RegisterGeneric(typeof(BaseValidator<>)).As(typeof(IValidator<>)).InstancePerDependency();
 builder.RegisterType<BaseValidator<Person>().As(typeof(IValidator<Person>)).InstancePerDependency();
 builder.RegisterType<PersonValidator>().As(typeof(IValidator<Person>)).InstancePerDependency();
 builder.RegisterType<PersonValidator>().As(typeof(BaseValidator<Person>)).InstancePerDependency();
c# .net asp.net-core autofac fluentvalidation
1个回答
0
投票

您不能使用var validator = new BaseValidator<TEntity>();,您必须在ctor(或IValidator<Person>)中注入IValidator<T>

© www.soinside.com 2019 - 2024. All rights reserved.