gpt4 book ai didi

c# - 派生类型的 FluentValidation SetCollectionValidator

转载 作者:太空狗 更新时间:2023-10-30 00:40:44 27 4
gpt4 key购买 nike

如何在派生类型的集合项上设置验证器?

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com