首页 > 解决方案 > 在 C# 中,如何使用反射添加 FluentValidation 的实例?

问题描述

目前,我正在 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. 不必同时传递TType和 ,TValidator因为 的每个实例TValidator都是根据 定义的TType

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

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

我怎样才能做到这一点?

标签: c#reflectiondryfluentvalidationtype-safety

解决方案


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

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

...假设我所有的验证器都与 Startup.cs 位于同一个项目中


推荐阅读