FluentObjectValidator是一个小而简单的验证库,为规则配置提供了流利的接口。
该库旨在提供基于属性的模型验证的替代方法(必需的attribute,stringLengthTatribute等)。
库目标.NET Standart 1.0,.NET 4.0,.NET 4.5
该库可作为Nuget软件包使用。
这是可以帮助您在应用中配置验证的步骤。
首先,当某个模型未通过验证时,您需要决定要收到的信息。
提供验证功能的主要类是:
Validator - 返回一个布尔值,该值指示是否通过是否通过了验证。Validator<TError> - 返回一个ValidationResult<TError>对象,其中包含布尔价值,以及一系列定制TError物体,这些物体将准确地向您展示,哪些规则没有通过。决定使用哪种验证器后,您要做的就是从中继承并添加配置,例如:
public class MyValidator : Validator
{
public MyValidator ( )
{
AddConfiguration ( new ProductDTOConfiguration ( ) ) ;
AddConfiguration ( new UserDTOConfiguration ( ) ) ;
}
} public class MyValidator : Validator < MyCustomError >
{
public MyValidator ( )
{
AddConfiguration ( new ProductDTOConfiguration ( ) ) ;
AddConfiguration ( new UserDTOConfiguration ( ) ) ;
}
}这将我们带入下一步。
要配置对象应遵循的规则,您需要为要验证的每种类型创建配置类。
根据所选验证器,所有配置均从ValidationConfiguration<TObject>或ValidationConfiguration<TObject, TError> 。
ValidationConfiguration<TObject> public class ProductDTOConfiguration : ValidationConfiguration < ProductDTO >
{
public ProductDTOConfiguration ( )
{
Property ( x => x . Title )
. IsRequired ( )
. HasRule ( x => x . Length <= 10 ) ;
}
}选择属性后,您可以以流利的方式添加验证规则。
您可以使用HasRule方法定义任何规则,但是有几个预定义的快捷方式,例如所有对象,以及IsRequired , HasMinLength , HasMaxLength , HasLengthInRange , MatchesRegex ,仅可用于字符串。
验证是按顺序依次进行的,规则被定义,并在规则之一没有通过后立即返回false ,或者如果所有规则通过, true 。
ValidationConfiguration<TObject, TError> public class ProductDTOConfiguration : ValidationConfiguration < ProductDTO , MyCustomError >
{
public ProductDTOConfiguration ( )
{
Property ( x => x . Title )
. IsRequired ( ( ) => new MyCustomError ( "Title is required" ) )
. HasRule (
x => x . Length <= 10 ,
( ) => new MyCustomError ( "Title is too long" ) ) ;
}
}配置验证,在发生故障的情况下返回自定义错误的验证更为复杂。
选择属性并定义规则后,您现在需要添加一个委托,如果规则不通过,将用于创建错误对象。
验证还按顺序进行了顺序进行,但如果规则未通过,则将错误添加到结果中,并且验证继续。
您可以配置验证以跳过当前属性或整个对象的其余规则,以防特定规则不通过。可以通过将相应的可选布尔参数stopValidationOnError和terminateValidationOnError传递到HasRule方法来完成。默认情况下,他们两个都是错误的。
IsRequired方法始终会跳过属性的其余规则,因为我们不需要检查其他规则,例如属性是否等于null。
诸如IsRequired , HasMaxLength类的快捷方式是通过扩展方法实现的,因此您可以轻松地将自己的快捷方式添加到项目中。
配置规则后,您现在可以创建验证器的实例并在任何需要的地方使用它。
var res = validator . Validate ( obj ) ;每个验证器都会公开一种公共“验证”方法,该方法可通过接口获得:
public interface IValidator < TError >
{
ValidationResult < TError > Validate < TObject > ( TObject target ) ;
}
public interface IValidator
{
bool Validate < TObject > ( TObject target ) ;
}这就是为什么您可以轻松地将其与依赖注入一起使用:
services . AddSingleton < IValidator , MyValidator > ( ) container . Register < IValidator < MyCustomError > , MyValidator > ( Lifestyle . Singleton ) ;在创建验证器实例期间,所有配置均已加载和验证,因此我认为最好将其用作单身人士。
该项目是根据MIT许可证获得许可的 - 有关详细信息,请参见许可证文件
规则配置发生的方式是受实体框架6及其配置实体之间关系的方式的启发。