fluentvalidation:全局应用于所有字符串属性



我想全局验证所有字符串属性,这样它们就不会以"性格

是否有一种方法可以使用FluentValidator对所有字符串属性进行全局验证。

我已经浏览了文档,但我找不到任何方法!

我认为如果存在这样的机会,他们会在文档中提到,但正如你所看到的,他们没有。在我看来,添加这样的工具不是一个好主意,因为在所有具有特定类型的验证器实例之间共享验证规则可能会导致意外的验证结果。这也意味着你必须制作一个工具,可以从全局上下文中排除特定的验证器。因此,将用具体类型的验证器编辑单个.cs文件与使用这样的东西进行比较,前者不害怕破坏其他人的验证逻辑,后者会降低代码的可靠性,更难理解和理解。它还令人惊叹吗?

但是,如果您确定可以在验证器之间共享验证规则,那么就可以使用基类来存储这些规则(正如您在评论中提到的(。

示例:

public class Parent
{
public string ParentValue1 { get; set; }
public string ParentValue2 { get; set; }
}
public class Child : Parent
{
}  

和验证器:

public class ParentValidator : AbstractValidator<Parent>
{
public ParentValidator()
{
RuleFor(x => x.ParentValue1).NotEmpty();
RuleFor(x => x.ParentValue2).NotEmpty();
}
}
public class ChildValidator : AbstractValidator<Child>
{
public ChildValidator()
{
Include(new ParentValidator());
}
}

您可以通过执行validate方法为所有验证器创建一个基类,然后再使用反射读取字符串类型的属性,并将要全局使用的规则应用于它们。正如@Repulse3所提到的,在某些情况下,您必须创建一种不应用的方法,在这种情况下,可以创建一个属性来装饰不执行规则的属性。

最新更新