将 属性 名称添加到基于实体的规则?
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);
}
上面的工作正常,但是,根据上面的规则,ValidationError
的 PropertyName
是空的。
有没有办法传递 属性 名称,或者我是否需要更改上述规则以使其基于 属性?
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" 作为参数传递的方法,但希望以上是一个非常快速的代码修复!
我有这样的规则:
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);
}
上面的工作正常,但是,根据上面的规则,ValidationError
的 PropertyName
是空的。
有没有办法传递 属性 名称,或者我是否需要更改上述规则以使其基于 属性?
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" 作为参数传递的方法,但希望以上是一个非常快速的代码修复!