我使用了Fluent Validator。但有时我需要创建一个规则层次结构。例如:
[Validator(typeof(UserValidation))]
public class UserViewModel
{
public string FirstName;
public string LastName;
}
public class UserValidation : AbstractValidator<UserViewModel>
{
public UserValidation()
{
this.RuleFor(x => x.FirstName).NotNull();
this.RuleFor(x => x.FirstName).NotEmpty();
this.RuleFor(x => x.LastName).NotNull();
this.RuleFor(x => x.LastName).NotEmpty();
}
}
public class RootViewModel : UserViewModel
{
public string MiddleName;
}
我想从UserValidation继承验证规则到RootValidation。但是这段代码不起作用:
public class RootViewModelValidation:UserValidation<RootViewModel>
{
public RootViewModelValidation()
{
this.RuleFor(x => x.MiddleName).NotNull();
this.RuleFor(x => x.MiddleName).NotEmpty();
}
}
如何使用FluentValidation继承验证类?
答案 0 :(得分:32)
要解决此问题,您必须将UserValidation
类更改为generic。请参阅下面的代码。
public class UserValidation<T> : AbstractValidator<T> where T : UserViewModel
{
public UserValidation()
{
this.RuleFor(x => x.FirstName).NotNull();
this.RuleFor(x => x.FirstName).NotEmpty();
this.RuleFor(x => x.LastName).NotNull();
this.RuleFor(x => x.LastName).NotEmpty();
}
}
[Validator(typeof(UserValidation<UserViewModel>))]
public class UserViewModel
{
public string FirstName;
public string LastName;
}
public class RootViewModelValidation : UserValidation<RootViewModel>
{
public RootViewModelValidation()
{
this.RuleFor(x => x.MiddleName).NotNull();
this.RuleFor(x => x.MiddleName).NotEmpty();
}
}
[Validator(typeof(RootViewModelValidation))]
public class RootViewModel : UserViewModel
{
public string MiddleName;
}