将 属性 名称添加到基于实体的规则?

Add property name to an entity-based rule?

我有这样的规则:

RuleFor(x => x).Must(MatchSomething).When(x => x.Children != null)

private bool MatchSomething(Parent parent)
{
    return parent.CountOfSomething == parent.Children.Count(x => x.ChildType == ChildType.EnumValue);
}

上面的工作正常,但是,根据上面的规则,ValidationErrorPropertyName 是空的。

有没有办法传递 属性 名称,或者我是否需要更改上述规则以使其基于 属性?

Must() 有一个有用的重载,我认为它可以解决您的问题,即它可以包含您正在验证的 class 作为第一个参数。所以你可以用下面的代码得到属性名字来显示"CountOfSomething":

class ParentValidator : AbstractValidator<Parent>
{
    public ParentValidator()
    {
        RuleFor(x => x.CountOfSomething).Must(MatchSomething).When(x => x.Children != null);
    }

    private bool MatchSomething(Parent parent, int countOfSomething)
    {
        return countOfSomething == parent.Children.Count(x => x.ChildType == ChildType.EnumValue);
    }
}

我不知道将 "CountOfSomething" 作为参数传递的方法,但希望以上是一个非常快速的代码修复!