递归类的流利验证

时间:2020-10-30 04:16:17

标签: c# fluentvalidation

我有一个像这样的递归数据结构

public class Node
{
     public string Id { get; set; }
     public List<List<Node>> Nodes = new List<List<Node>>();
}

我为Id属性定义了一个验证器,我想为Nodes属性中的所有Node元素运行该验证器。我怎样才能做到这一点?我尝试过类似

RuleForEach(r => r.Nodes).ChildRules(c => c.RuleForEach(x => x).SetValidator(new NodeValidator()));

但这似乎正在陷入无限循环。

1 个答案:

答案 0 :(得分:1)

因为要在NodeValidator的构造函数中创建NodeValidator的新实例,所以您陷入了无限循环。

您应该分配this作为验证者:

RuleForEach(r => r.Nodes).ChildRules(c => c.RuleForEach(x => x).SetValidator(this));