C#学习教程:C#FluentValidation用于类的层次结构分享


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器

上述就是C#学习教程:C#FluentValidation用于类的层次结构分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—猴子技术宅(www.ssfiction.com)

 ///  /// 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); } } } 

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/ckf/1032005.html

发表评论

邮箱地址不会被公开。 必填项已用*标注