我有一个 azure 函数,我收到一个 json 包含的 Json
List<Iinterface> objects {get;set;}
然后我可以有几个对象实现 Iinterfacepublic class A : Iinterface { ... }
json 转换器实际上解析了类型,所以如果我调用 .GetType 在列表的项目上,我会得到正确的底层类型!但是接下来我需要根据底层类型进行验证!
我明白了,但我能做得更好吗?
public class IinterfaceValidator : AbstractValidator<Iinterface>
{
public IinterfaceValidator (AValidator aValidator)
{
When(x => x.GetType() == typeof(A), () =>
{
RuleFor(x => (A)x)
.SetValidator(aValidator);
});
}
}
最佳答案
更简洁的实现是使用 SetInheritanceValidator
.假设您有验证器 AValidator
和 BValidator
分别为以下类(class)。
public class A : Iinterface { ... }
public class B : Iinterface { ... }
然后为 Iinterface
定义一个验证器。如下所示。注意我正在使用子验证器的延迟初始化来避免在初始化期间创建实例。public class IinterfaceValidator : AbstractValidator<Iinterface>
{
public IinterfaceValidator() {
RuleFor(x => x).SetInheritanceValidator(v => {
v.Add<A>(i => new AValidator())
.Add<B>(i => new BValidator());
});
}
}
你也可以看看他们的继承例子here .
关于接口(interface)底层对象的C#流利验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64428798/