You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FluentValidation链式规则中的验证器是否接收缓存的实例或属性值?

问题原理说明

同一条RuleFor链式调用下的所有验证器,会在验证启动时一次性读取目标属性的初始值并缓存,后续链上所有验证器都会复用这个缓存值,不会在每个验证器执行完成后重新读取属性的最新值。你在MyCustomValidator中给属性赋的新值不会被后续链式调用的NotNull验证器捕获,所以会验证失败。

拆分两条独立RuleFor时,每条规则都会单独触发一次属性值读取,第一条规则完成属性赋值后,第二条规则读取的是最新的赋值结果,所以验证可以正常通过。

单条RuleFor的实现方案

如果你不想拆分多条RuleFor,可以通过以下两种方式实现需求:

  • 方案1:用内联委托验证替代内置的NotNull验证器,直接从实例读取最新属性值
RuleFor(x => x.MyProperty)
    .SetValidator(new MyCustomValidator())
    .Must((instance, _) => instance.MyProperty != null)
    .WithMessage("'MyProperty' 不能为空");
  • 方案2:使用DependentRules声明依赖规则,依赖规则会在前置验证完成后重新读取属性值
RuleFor(x => x.MyProperty)
    .SetValidator(new MyCustomValidator())
    .DependentRules(() => 
    {
        RuleFor(x => x.MyProperty).NotNull();
    });

内容的提问来源于stack exchange,提问作者Dirk S.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 14:21:02