Nik*_*mov 47 c# fluentvalidation
我有一个数据类层次结构
public class Base
{
// Fields to be validated
}
public class Derived1 : Base
{
// More fields to be validated
}
public class Derived2 : Base
{
// More fields to be validated
}
Run Code Online (Sandbox Code Playgroud)
使用FluentValidation框架验证Derived1和Derived2的适当方法是什么,而不重复Base类字段的规则?
小智 62
public class Derived2Validator : AbstractValidator<Derived2>
{
public Derived2Validator()
{
Include(new BaseValidator());
Include(new Derived2Validator());
RuleFor(d => d.Derived1Name).NotNull();
}
}
Run Code Online (Sandbox Code Playgroud)
Derived2Validator
不需要继承BaseValidator
或Derived1Validator
.该Include
方法将包括基本验证器的规则.
Yan*_*eus 52
一种方法如下:
public class Base
{
public string BaseName { get; set; }
}
public class Derived1 : Base
{
public string Derived1Name { get; set; }
}
public class BaseValidator<T> : AbstractValidator<T> where T : Base
{
public BaseValidator()
{
RuleFor(b => b.BaseName).NotNull();
}
}
public class Derived1Validator : BaseValidator<Derived1>
{
public Derived1Validator()
{
RuleFor(d => d.Derived1Name).NotNull();
}
}
Run Code Online (Sandbox Code Playgroud)
因此,首先要创建基本验证器,使其接受泛型类型参数,并指定泛型类型必须是类型base
.设置基类的一般规则并继续.
对于验证基类的子类的任何验证器,您将从baseValidator继承那些验证器,其中T将是您的派生类类型.
归档时间: |
|
查看次数: |
10573 次 |
最近记录: |