我有一組繼承相同基類的類。每個具體類都有自己的類用于驗證。另一個類有一個基類集合,我想用具體的驗證器驗證每個元素。
在網頁上爬行時,我在FluentValidation GitHub問題跟蹤器上發現了一個問題。解決方案是使用ChildValidatorAdaptor。不幸的是,他們更改了類,使其使用通用方法。通過此更改,PropertyValue在IValidationContext上也不再可用,因為IVvalidationContext將允許檢索每個條目的當前類型。
想用*.SetValidator(new解決它…)。When(…)或ChildRules。但從我的理解來看,這兩種方式都無助于我。
有沒有提示需要什么才能在版本11中實現這種驗證行為?
public abstract class Base { ... }
public class A : Base {}
public class AValidator : AbstractValidator<A> { ... }
public class B : Base {}
public class BValidator : AbstractValidator<B> { ... }
public class SomeOther
{
List<Base> Elements { get; set; } = new List<Base>();
}
public class SomeOtherValidator : AbstractValidator<SomeOther>
{
public SomeOtherValidator()
{
// use AValidator or BValidator dependend on the concrete type of each element
RuleForEach(x => x.Elements).SetValidator(??);
}
}
關于繼承驗證的FluentValidation文檔有以下示例:
用于實現公共
IContact
接口的類Person
和Organisation
。根據文檔,這也適用于抽象基類:
適合你的情況
至少我是這樣讀那份文件的。