FluentValidation可以使用嵌套集合吗?

lek*_*kso 4 c# asp.net-mvc fluentvalidation

FluentValidation可以使用分层集合吗?是否可以验证具有任意数量的Child节点的以下对象?

public class Node
{
    public string Id { get; set; }
    public List<Node> ChildNodes { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

用非常简单的术语来说,我希望以下代码可以工作:

public class NodeValidator : AbstractValidator<Node>
{
    public NodeValidator()
    {
        RuleFor(x => x.ChildNodes).SetCollectionValidator(new NodeValidator());
        RuleFor(x => x.Id).NotEmpty();
    }
}
Run Code Online (Sandbox Code Playgroud)

此行导致StackOverflow异常:

RuleFor(x => x.ChildNodes).SetCollectionValidator(new NodeValidator());
Run Code Online (Sandbox Code Playgroud)

如何验证深层嵌套对象的属性"Id"?

Gri*_*dko 8

接受的答案不再是实际的。SetCollectionValidator方法已被弃用

相反,您应该使用RuleForEach和SetValidator。正确的代码是:

RuleForEach(x => x.ChildNodes).SetValidator(this);
Run Code Online (Sandbox Code Playgroud)


Rap*_*aus 6

为了避免你的ctor中的递归,我会更正你的验证器

RuleFor(x => x.ChildNodes).SetCollectionValidator(this);
Run Code Online (Sandbox Code Playgroud)

我试了一下,它似乎正确地检索了验证错误,但是......我告诉你,这是否真的是你需要的.