对于我的FormPartB
对象,我有几个业务规则,它们依赖于相关实体Licensee
和FormPartA
。我是FluentValidation的新手。
我想做的是:
我的objects.
Licensee
和FormPartA
实体一次,然后为FormPartB
设置一系列规则(即Must()
谓词),使用来自相关的FormPartBValidator
的值,我不想在每个规则定义中再次获取两个外部实体。我有几个想法:
(1)在我的RuleFor
定义之上,在Validator构造函数中获取这些实体,然后将这些实体保存为私有字段,
public PartBValidator()
{
// Get my external data and save as private fields
RuleFor...
RuleFor...
}
或
(2)让调用中的实体验证(),然后将这些实体保存为私有字段:
public override ValidationResult Validate(FormPartB instance)
{
// Get my external data and save as private fields
return base.Validate(instance);
}
然而,
在选项(1)中,我似乎无法访问选项(2) FormPartB
.)
)
有什么建议吗?
发布于 2012-02-07 18:52:08
我在应用程序中通过依赖项来处理这个问题--向构造函数中注入一个服务,该构造函数检索验证所依赖的数据,结果非常好。
下面是一个例子:
private readonly IFormService _service;
public PartBValidator(IFormService service)
{
_service = service;
var valueICareAbout = _service.GetMeFormAData();
RuleFor... // uses valueICareAbout
RuleFor...
}
如果您担心通过规则定义中的服务获取数据对性能的影响,也可以考虑一些缓存选项。
https://stackoverflow.com/questions/8321008
复制相似问题