😺
FluentValidationでカスタムバリデータを作成する
.NETのバリデーションライブラリである FluentValidation で、独自ルールのバリデーションを作って使い回せるようにする方法を記載する。
基本的には、Predicate Validator を使用するのがよい。
Predicate Validator によるカスタムバリデータの作成
FluentValidation の IRuleBuilder
の拡張メソッドで Predicate Validator として作成する。
Must
に対する条件式としてカスタムバリデータのルールを記載する。
定義
public static IRuleBuilderOptions<T, string> IsAlphabetic<string>(this IRuleBuilder<T, string> ruleBuilder)
{
return ruleBuilder
.Must((str) => Regex.IsMatch(str, ^[A-z]+$"))
.WithMessage("アルファベット以外の文字が含まれています。");
}
使用例
RuleFor(x => x.FirstName).IsAlphabetic();
公式サイト predicate-validator
PropertyValidator によるカスタムバリデータの作成
別の方法として、PropertyValidator
を使ってバリデータを作成する方法もある。
public class IsAlphabeticValidator : PropertyValidator
{
public IsAlphabeticValidator() {
}
protected override bool IsValid(PropertyValidatorContext context)
{
return Regex.IsMatch(context.PropertyValue?.ToString() ?? "", "^[A-z]+$")
}
}
FluentValidator 10.0 でジェネリックスを利用することもできるようになった。
RuleFor(x => x.FirstName).SetValidator(new IsAlphabeticValidator())
PropertyValidator の利用はなるべく避ける
Predicate Validator の方が簡潔に書け、型の間違いに気づきやすいなどの利点もある。
reusable-property-validators
公式サイトにも通常は不要であると記載がある。
This is an advanced technique that is usually unnecessary - the Must and Custom methods explained above are usually more appropriate.
Discussion