我的FormPartB
对象有几个依赖于相关实体Licensee
和FormPartA
的业务规则。我是FluentValidation的新手。
我想做的是:
在我的FormPartBValidator
中,获取Licensee
和FormPartA
个实体一次,然后为{{1}设置一堆规则(即Must()
谓词)使用这些相关对象的值。
即。我不想在每个规则定义中再次获取两个外部实体。
我有几个想法:
(1)在我的FormPartB
定义之上的Validator构造函数中获取这些实体,然后将这些实体保存为私有字段,
RuleFor
或
(2)在Validate()调用中获取这些实体,然后将这些实体保存为私有字段:
public PartBValidator()
{
// Get my external data and save as private fields
RuleFor...
RuleFor...
}
然而
在选项(1)中,我似乎无法访问FormPartB实例
在选项(2)中,Validate()似乎没有像我想象的那样工作(即似乎没有在public override ValidationResult Validate(FormPartB instance)
{
// Get my external data and save as private fields
return base.Validate(instance);
}
的每次验证时调用。)
我甚至不确定“获取对象并保存为私人字段”是正确的方法。
有什么建议吗?
答案 0 :(得分:4)
我已经在应用程序中通过依赖注入服务到构造函数来处理这个问题,该构造函数检索验证所依赖的数据,并且它已经很好地完成了。
以下是一个例子:
private readonly IFormService _service;
public PartBValidator(IFormService service)
{
_service = service;
var valueICareAbout = _service.GetMeFormAData();
RuleFor... // uses valueICareAbout
RuleFor...
}
如果您担心在规则定义中通过服务获取数据会对性能产生影响,您也可以考虑一些缓存选项。