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及其配置實體之間關係的方式的啟發。