如何从多个程序集中注册FluentValidation验证器
配置FluentValidation加载多程序集验证器
要加载分布在多个程序集(包括共享类库)中的FluentValidation验证器,你可以通过以下两种常用方式修改配置:
方法一:多次调用AddValidatorsFromAssemblyContaining
针对每个包含验证器的程序集,指定该程序集中的任意一个验证器类型(或其他类型),FluentValidation会自动扫描并注册整个程序集内所有继承AbstractValidator<T>的验证器。
修改后的Startup.cs配置示例:
// 注册当前Web项目程序集内的验证器 services.AddValidatorsFromAssemblyContaining<Startup>(); // 注册共享类库程序集内的验证器(指定该类库中的任意一个验证器类型) services.AddValidatorsFromAssemblyContaining<TestModelValidator>(); // 若还有其他程序集,继续添加对应的调用 // services.AddValidatorsFromAssemblyContaining<AnotherValidatorFromOtherLib>(); services.AddFluentValidationAutoValidation(); services.AddFluentValidationClientsideAdapters();
注:
TestModelValidator是共享类库中的验证器类,确保你的Web项目已正确引用该共享类库。
方法二:使用AddValidatorsFromAssemblies批量注册
如果需要注册的程序集数量较多,或者不想指定具体类型,可以先获取目标程序集的实例,再批量传入注册方法。
示例代码:
// 获取当前Web项目的程序集 var webAssembly = Assembly.GetExecutingAssembly(); // 获取共享类库的程序集(可通过类型或程序集名称加载) var sharedAssembly = typeof(TestModelValidator).Assembly; // 若有其他程序集,继续添加到集合中 var targetAssemblies = new[] { webAssembly, sharedAssembly }; // 批量注册多个程序集的验证器 services.AddValidatorsFromAssemblies(targetAssemblies); services.AddFluentValidationAutoValidation(); services.AddFluentValidationClientsideAdapters();
注意事项
- 所有验证器类必须是公共类(public),且继承自
AbstractValidator<T>,FluentValidation才能扫描到它们。 - 确保Web项目已正确引用包含验证器的所有类库,避免程序集加载失败。
- 若使用.NET 6+的顶级语句(无Startup类),只需将上述代码迁移到
Program.cs的builder.Services配置块中即可。
内容的提问来源于stack exchange,提问作者user3552264
相关产品推荐
相关产品推荐

