FluentObjectValidatorは、ルール構成のためにFluentインターフェイスを提供する小さくてシンプルな検証ライブラリです。
ライブラリは、モデルの属性ベースの検証(必要なアットリブ、String-LengthAttributeなど)の代替を提供することを目的としています。
ライブラリは.NET STANDART 1.0、.NET 4.0、.NET 4.5をターゲットにしています
ライブラリは、Nugetパッケージとして利用できます。
アプリで検証を構成するのに役立つ手順を以下に示します。
まず最初に、特定のモデルが検証に合格しなかった場合、受信したい情報を決定する必要があります。
検証機能を提供する主なクラスは次のとおりです。
Validator wheterが渡されたかどうかを示すブール値を返します。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 ) ;
}
}プロパティを選択した後、流fluentで検証ルールを追加できます。
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 ) ;すべての構成は、Balidatorインスタンスの作成中にロードおよび検証されているため、私の意見では、シングルトンとして使用するのが最善です。
このプロジェクトはMITライセンスに基づいてライセンスされています - 詳細については、ライセンスファイルを参照してください
ルール構成が発生する方法は、エンティティフレームワーク6に触発され、エンティティ間の関係を構成する方法に触発されました。