我有一个通用类,以相同的方式处理不同的实体。我正在尝试在此通用类中实现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();
您不能使用var validator = new BaseValidator<TEntity>();
,您必须在ctor(或IValidator<Person>
)中注入IValidator<T>
。