作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
如何在派生类型的集合项上设置验证器?
class BaseClass
{
}
class DerivedClass : BaseClass
{
}
class SomeClass
{
public IEnumerable<BaseClass> BaseClasses { get; set; }
}
class DerivedClassValidator : AbstractValidator<DerivedClass>
{
}
class SomeClassValidator : AbstractValidator<SomeClass>
{
public SomeClassValidator()
{
RuleFor(x => x.BaseClasses).????.SetCollectionValidator(new DerivedClassValidator);
}
}
只是想知道...
有没有办法把它转换成一个特定的类型,比如
RuleFor(x => x.SomeCollection).CastTo(typeof(SomeDerivedType)).SetCollectionValidator(new SomeDerivedValidator());
最佳答案
您可以使用规则的条件包装来验证包含不同派生类型对象的集合。
假设您有下一个类层次结构:
public class BaseClass
{
public string Name { get; set; }
}
public class DerivedClassOne : BaseClass
{
public int Count { get; set; }
}
public class DerivedClassTwo : BaseClass
{
public double Price { get; set; }
}
以及包含 BaseClass
对象集合的容器类:
public class ContainerClass
{
public List<BaseClass> Collection { get; set; }
}
主要思想是创建一个验证器类,负责所有类层次验证:
public class CommonBaseClassValidator : AbstractValidator<BaseClass>
{
public CommonBaseClassValidator()
{
//common rule for all BaseClass types
RuleFor(x => x.Name)
.NotEmpty();
// special rules for base type
When(model => model.GetType() == typeof (BaseClass), () =>
{
RuleFor(x => x.Name)
.Length(0, 10);
// add rules here
});
//special rules for derived types
When(model => model.GetType() == typeof(DerivedClassOne), () =>
{
RuleFor(model => ((DerivedClassOne) model).Count)
.ExclusiveBetween(1, 9);
// add rules here
});
When(model => model.GetType() == typeof(DerivedClassTwo), () =>
{
RuleFor(model => ((DerivedClassTwo) model).Price)
.GreaterThan(1000);
// add rules here
});
}
}
并将此类注册为集合项验证器:
public class ContainerValidator : AbstractValidator<ContainerClass>
{
public ContainerValidator()
{
RuleFor(model => model.Collection)
.SetCollectionValidator(new CommonBaseClassValidator());
}
}
关于c# - 派生类型的 FluentValidation SetCollectionValidator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24948143/
亲爱的我正在尝试使用 SetCollectionValidator 验证对象列表并且列表计数可能有 0 个对象或更多对象所以验证返回错误直到列表没有这样的项目 public class SCReque
如何在派生类型的集合项上设置验证器? class BaseClass { } class DerivedClass : BaseClass { } class SomeClass { publ
我是 Fluent Validation 的新手,昨天刚从 nu Get 获得了 5.3 版。我正在尝试将现有验证器 (PhoneValidator) 应用于类 (Employee) 的集合属性 (I
我在 ASP.NET MVC 项目中使用 FluentValidation 库,从 UI 角度来看,它按预期工作。违反规则会显示正确的错误。 我有一个父类,它有一个验证器和一个集合属性,其中该类型有一
我是一名优秀的程序员,十分优秀!