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 } 

使用FluentValidation框架validationDerived1和Derived2的适当方法是什么,而不重复Base类字段的规则?

一种方法如下:

 public class Base { public string BaseName { get; set; } } public class Derived1 : Base { public string Derived1Name { get; set; } } public class BaseValidator : AbstractValidator where T : Base { public BaseValidator() { RuleFor(b => b.BaseName).NotNull(); } } public class Derived1Validator : BaseValidator { public Derived1Validator() { RuleFor(d => d.Derived1Name).NotNull(); } } 

因此,首先要创建基本validation器,使其接受generics类型参数,并指定generics类型必须是base类型。 设置基类的一般规则并继续。

对于validation基类的子类的任何validation器,您将从baseValidatorinheritance那些validation器,其中T将是您的派生类类型。

 public class Derived2Validator : AbstractValidator { public Derived2Validator() { Include(new BaseValidator()); Include(new Derived2Validator()); RuleFor(d => d.Derived1Name).NotNull(); } } 

Derived2Validator不需要inheritanceBaseValidatorDerived1ValidatorInclude方法将包括基本validation器的规则。

我尝试了Include()方法,但是由于.net core中的swagger生成的模型没有显示任何更改,因此没有给出我想要的结果。 什么工作是创建一个新类inheritance有具有基类的validation器

 ///  /// Base Class for entity validator classes that specifies a base validator class ///  /// The Type being validated /// The validater assigned to the base type of the type being validated public abstract class BaseAbstractValidator : AbstractValidator where TBaseClass : IEnumerable { protected BaseAbstractValidator() => AppendRules(); ///  /// Add the set of validation rules ///  ///  private void AppendRules() where TValidationRule : IEnumerable { var rules = (IEnumerable)Activator.CreateInstance(); foreach (var rule in rules) { AddRule(rule); } } }