0

我的FormPartB对象有几个业务规则,它们依赖于相关实体LicenseeFormPartA. 我是 FluentValidation 的新手。

我想做的(我认为)是:

  • 在 myFormPartBValidator中,获取LicenseeandFormPartA实体一次,然后设置一堆规则(即Must()谓词)以FormPartB使用来自这些相关对象的值。

  • 即我不想在每个规则定义中再次获取两个外部实体。

我有几个想法:

(1) 在验证器的构造函数中获取那些实体,在我的RuleFor定义之上,然后将这些实体保存为私有字段,

public PartBValidator()
{
    // Get my external data and save as private fields

    RuleFor...
    RuleFor...
}

或者

(2) 在对 Validate() 的调用中获取这些实体,然后将这些实体保存为私有字段:

public override ValidationResult Validate(FormPartB instance)
{
    // Get my external data and save as private fields

    return base.Validate(instance);
}

然而

  • 在选项 (1) 中,我似乎无法访问 FormPartB 实例

  • 在选项 (2) 中,Validate() 似乎没有像我想象的那样工作(即似乎没有在每次验证时都被调用FormPartB。)

  • 而且我什至不确定“获取对象并保存为私有字段”是正确的方法。

有什么建议吗?

4

1 回答 1

4

我已经在应用程序中通过将服务注入到构造函数中来处理这个问题,该构造函数检索验证所依赖的数据,并且效果非常好。

这是一个例子:

private readonly IFormService _service;

public PartBValidator(IFormService service)
{
    _service = service;

    var valueICareAbout = _service.GetMeFormAData();

    RuleFor...  // uses valueICareAbout
    RuleFor...
}

如果您担心通过规则定义中的服务获取数据对性能的影响,您也可以考虑一些缓存选项。

于 2012-02-08T02:52:08.467 回答