c# - 在 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();
我突然想到:
不必同时传递
TType
和 ,TValidator
因为 的每个实例TValidator
都是根据 定义的TType
。这样做不仅是多余的,而且是危险的,因为不能保证
TType
正确对应TValidator
.系统应该有一种方法可以自动发现存在哪些验证器,然后自动添加它们(类似于添加 API 控制器的方式)。
我怎样才能做到这一点?
解决方案
感谢@Jamiec 和一位同事,我现在明白我需要做的就是:
services.AddFluentValidation(c => c.RegisterValidatorsFromAssemblyContaining<Startup>());
...假设我所有的验证器都与 Startup.cs 位于同一个项目中
推荐阅读
- spring-boot - Spring Boot RESTful WebService 部署:JAR 与 WAR?
- pandas - 根据外部条件向 pandas 数据框添加列
- python - 在需要时从 dict 添加行替换列值
- unity3d - 使用 Unity 时的 2 个窗口
- bash - 如何解决 wget google docs redirect 的问题
- pytorch - 如何以非交互方式使用 fairseq interactive.py?
- java - DrawableCompat.setTint 不可靠?
- python - 在匹配特定条件的两个 numpy 数组中查找通用索引
- kubernetes - 如何在 Instio 上禁用 mtls?
- azure-application-insights - 来自不同实例的 kusto 项目