Зарегистрируйте универсальный валидатор c с помощью FluentValidation и Autofac - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть обобщенный c класс, который обрабатывает различные объекты одинаково. Я пытаюсь реализовать Validator в этом классе generi c, тип Validator должен меняться в зависимости от типа generi c. Например, если типом является Person, PersonValidator должен быть инициализирован. Как это возможно с помощью FluentValidation и Autofa c? Я пробовал использовать универсальный c BaseValidator, но я не могу зарегистрировать его правильно, поэтому PersonValidator не вызывается.

Generi c class

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();
    }
}

Autofa c регистраций, которые я пробовал

 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();

1 Ответ

1 голос
/ 20 февраля 2020

Вы не можете использовать var validator = new BaseValidator<TEntity>(); Вы должны ввести IValidator<Person> в свой ctor (или IValidator<T>).

...