首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用FluentValidation有效地验证几个依赖外部数据的业务规则?

如何使用FluentValidation有效地验证几个依赖外部数据的业务规则?
EN

Stack Overflow用户
提问于 2011-11-30 04:06:16
回答 1查看 1.4K关注 0票数 0

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

我想做的是:

我的objects.

  • i.e.中的
  • ,获取LicenseeFormPartA实体一次,然后为FormPartB设置一系列规则(即Must()谓词),使用来自相关的FormPartBValidator的值,我不想在每个规则定义中再次获取两个外部实体。

我有几个想法:

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

代码语言:javascript
代码运行次数:0
运行
复制
public PartBValidator()
{
    // Get my external data and save as private fields

    RuleFor...
    RuleFor...
}

(2)让调用中的实体验证(),然后将这些实体保存为私有字段:

代码语言:javascript
代码运行次数:0
运行
复制
public override ValidationResult Validate(FormPartB instance)
{
    // Get my external data and save as private fields

    return base.Validate(instance);
}

然而,

在选项(1)中,我似乎无法访问选项(2) FormPartB.)

  • And ()中的FormPartB实例

  • ,它的工作方式似乎不像我想的那样(也就是说,似乎没有在每次验证的时候都被调用,我甚至不确定“获取对象并将其保存为私有字段”是正确的方法。

)

有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-08 02:52:08

我在应用程序中通过依赖项来处理这个问题--向构造函数中注入一个服务,该构造函数检索验证所依赖的数据,结果非常好。

下面是一个例子:

代码语言:javascript
代码运行次数:0
运行
复制
private readonly IFormService _service;

public PartBValidator(IFormService service)
{
    _service = service;

    var valueICareAbout = _service.GetMeFormAData();

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

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8321008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档