使用 FluentValidation 验证数据的通用方法
generic method validating data using FluentValidation
我在 C# 项目中使用 FluentValidator。
我想创建一个通用方法来验证来自 2 种可能类型的数据:
public class MyClassAValidator : AbstractValidator<MyClassA> {...}
public class MyClassBValidator : AbstractValidator<MyClassB> {...}
public void MyMt<T>(T param)
{
AbstractValidator<T> validator = null;
if(param is MyClassA)
{
var validator = new MyClassAValidator(); // Generatescompiler error
}
else if (cCOSLDto is CCOSLLoyerDto)
{
validator = new MyClassBValidator(); // Generatescompiler error
}
ValidationResult result = validator.Validate(param);
}
编译器无法将 MyClassAValidator() 或 MyClassBValidator() 转换为 AbstractValidator
我该如何处理?
我怀疑(虽然只是怀疑)如果我将基数 class 设置为 MyClassA 和 MyClassB,它会起作用。但我想尽可能避免这种情况,因为 MyClassA 和 MyClassB 实际上是 DTO classes 所以我希望它们保持没有继承关系。
实际上,如果您需要在一个方法中验证两种不同类型的对象,您不必搞乱从泛型继承 class。
有一种简单的方法可以做到这一点。任何 Validate
方法 returns ValidationResult
,所以你可以使用这样的东西:
using FluentValidation;
using FluentValidation.Results;
using System;
namespace FluentValidatorTranslation
{
class Program
{
static void Main(string[] args)
{
}
public ValidationResult MyMt<T>(T param)
{
ValidationResult result;
if(param is MyClassA myClassA)
{
var validator = new MyClassAValidator();
result = validator.Validate(myClassA);
}
else if (param is MyClassB myClassB)
{
var validator = new MyClassBValidator();
result = validator.Validate(myClassB);
}
else
{
throw new ArgumentException("Type not supported");
}
return result;
}
}
public class MyClassA { }
public class MyClassB { }
public class MyClassAValidator : AbstractValidator<MyClassA>
{
}
public class MyClassBValidator : AbstractValidator<MyClassB>
{
}
}
我在 C# 项目中使用 FluentValidator。 我想创建一个通用方法来验证来自 2 种可能类型的数据:
public class MyClassAValidator : AbstractValidator<MyClassA> {...}
public class MyClassBValidator : AbstractValidator<MyClassB> {...}
public void MyMt<T>(T param)
{
AbstractValidator<T> validator = null;
if(param is MyClassA)
{
var validator = new MyClassAValidator(); // Generatescompiler error
}
else if (cCOSLDto is CCOSLLoyerDto)
{
validator = new MyClassBValidator(); // Generatescompiler error
}
ValidationResult result = validator.Validate(param);
}
编译器无法将 MyClassAValidator() 或 MyClassBValidator() 转换为 AbstractValidator
我该如何处理? 我怀疑(虽然只是怀疑)如果我将基数 class 设置为 MyClassA 和 MyClassB,它会起作用。但我想尽可能避免这种情况,因为 MyClassA 和 MyClassB 实际上是 DTO classes 所以我希望它们保持没有继承关系。
实际上,如果您需要在一个方法中验证两种不同类型的对象,您不必搞乱从泛型继承 class。
有一种简单的方法可以做到这一点。任何 Validate
方法 returns ValidationResult
,所以你可以使用这样的东西:
using FluentValidation;
using FluentValidation.Results;
using System;
namespace FluentValidatorTranslation
{
class Program
{
static void Main(string[] args)
{
}
public ValidationResult MyMt<T>(T param)
{
ValidationResult result;
if(param is MyClassA myClassA)
{
var validator = new MyClassAValidator();
result = validator.Validate(myClassA);
}
else if (param is MyClassB myClassB)
{
var validator = new MyClassBValidator();
result = validator.Validate(myClassB);
}
else
{
throw new ArgumentException("Type not supported");
}
return result;
}
}
public class MyClassA { }
public class MyClassB { }
public class MyClassAValidator : AbstractValidator<MyClassA>
{
}
public class MyClassBValidator : AbstractValidator<MyClassB>
{
}
}