簡體   English   中英

使用 FluentValidation 和 Autofac 注冊通用驗證器

[英]Register a generic Validator using FluentValidation and Autofac

我有一個通用類,它以相同的方式處理不同的實體。 我試圖在這個泛型類中實現一個驗證器,驗證器類型應該根據泛型類型而改變。 例如,如果類型是 Person,則 PersonValidator 應該被初始化。 這怎么可能使用 FluentValidation 和 Autofac? 我已經使用通用 BaseValidator 嘗試過它,但我似乎無法正確注冊它,因此不會調用 PersonValidator。

通用類

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

基礎驗證器

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

人員驗證器

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>(); 您必須在您的IValidator<T> (或IValidator<T> )中注入一個IValidator<Person>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM