FluentValidation自动注册如何匹配对应实体的验证器?
FluentValidation 多验证器匹配机制
FluentValidation 是通过验证器与实体的泛型绑定关系来确定要应用的验证器,核心逻辑如下:
定义阶段的绑定:每个验证器类都继承自
AbstractValidator<T>,其中泛型参数T就是该验证器对应的目标实体类型。比如CustomerValidator : AbstractValidator<Customer>明确声明了它是Customer实体的验证器,PersonValidator : AbstractValidator<Person>则对应Person实体。自动注册的逻辑:调用
services.AddValidatorsFromAssemblyContaining<Program>()时,FluentValidation 会扫描指定程序集中所有继承自AbstractValidator<T>的类型,并将它们注册到依赖注入容器中,注册的服务类型为IValidator<T>(对应各自的实体类型T)。运行时的匹配:
- 手动验证场景:当你从 DI 容器中请求
IValidator<Customer>,容器会返回CustomerValidator的实例;请求IValidator<Person>则返回PersonValidator。 - ASP.NET Core 自动验证场景:框架会根据当前要验证的模型类型(比如 Action 的参数是
Customer实例),自动查找并使用对应的IValidator<Customer>执行验证逻辑。
- 手动验证场景:当你从 DI 容器中请求
举个手动获取验证器的代码示例:
// 从DI容器获取对应实体的验证器 var customerValidator = serviceProvider.GetRequiredService<IValidator<Customer>>(); // 执行验证 ValidationResult result = customerValidator.Validate(new Customer());
内容的提问来源于stack exchange,提问作者One Developer
相关产品推荐
相关产品推荐

