在 C# 中,如何使用反射添加 FluentValidation 实例?

In C#, how can I add instances of FluentValidation using reflection?

目前,我正在 Startup.cs 添加验证器,例如:

public void ConfigureContainer(ContainerBuilder builder)
        {
            Register<Signer, SignerValidator>(builder);
            Register<ContractBase, ContractBaseValidator>(builder);
            Register<ContractGridop, ContractGridopValidator>(builder);
            Register<ContractSepa, ContractSepaValidator>(builder);
            Register<ContractVollmacht, ContractVollmachtValidator>(builder);
        }

        private static void Register<TType, TValidator>(
                ContainerBuilder builder
            ) =>
             builder.RegisterType<TValidator>()
                    .As<IValidator<TType>>()
                    .SingleInstance();

我突然想到:

  1. 不需要同时传递TTypeTValidator,因为TValidator的每个实例都是根据TType定义的。

  2. 这样做不仅多余而且危险,因为无法保证 TType 会正确对应 TValidator.

  3. 系统应该有一种方法可以自动发现存在的验证器,然后自动添加它们(类似于添加 API 控制器的方式)。

我该怎么做?

感谢@Jamiec 和一位同事,我现在明白我需要做的就是:

services.AddFluentValidation(c => c.RegisterValidatorsFromAssemblyContaining<Startup>());

... 假设我所有的验证者都与 Startup.cs

在同一个项目中