You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 10:15:06