FluentValidation.AspNetCore环境下如何注入所有已注册验证器?
实现方案
你使用的10.3.3版本FluentValidation.AspNetCore原生支持该需求,只需两步即可实现:
步骤1:修改验证器注册配置
默认AddValidatorsFromAssemblyContaining方法只会注册验证器的泛型IValidator<T>接口,你需要开启includeNonGenericInterfaces参数,让每个验证器同时注册为非泛型IValidator接口的实现:
// 原注册代码新增参数即可,不影响原有泛型注入的逻辑 services.AddValidatorsFromAssemblyContaining<TestValidator>(includeNonGenericInterfaces: true);
步骤2:构造函数注入所有验证器集合
直接注入IEnumerable<IValidator>即可拿到所有已注册的验证器实例:
public class Service : IService { private readonly IEnumerable<IValidator> _allValidators; public Service(IEnumerable<IValidator> allValidators) { _allValidators = allValidators; } // 附加使用示例:根据目标类型匹配对应验证器 public IValidator? GetMatchValidator(Type entityType) { return _allValidators.FirstOrDefault(v => v.CanValidateInstancesOfType(entityType)); } }
注意事项
- 该配置和原有单个泛型
IValidator<Test>的注入逻辑完全兼容,两种注入方式可以同时使用互不影响 - 非泛型
IValidator接口是FluentValidation原生提供的,IValidator<T>默认继承自该接口,无需额外自定义接口
内容的提问来源于stack exchange,提问作者Repulse3
相关产品推荐
相关产品推荐

