c# - 接口底层对象的C#流利验证
问题描述
我有一个 azure 函数,我收到一个 json 包含的 Json
List<Iinterface> objects {get;set;}
然后我可以有几个对象实现 Iinterface
public 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
以下类。
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());
});
}
}
您还可以在此处查看他们的继承示例。
推荐阅读
- python - 如何在python中概率性地填充列表?
- twitter-bootstrap - 无法在引导卡中添加两列
- python - 在 sympy 中生成一个多变量多项式
- reactjs - 用 redux 命名导出?
- php - 如何获得完全解码的字符串
- android - 发生 Selendroid webdriver 初始化错误
- swift - 迅速。使地图视图注释平滑过渡到新的注释视图
- angular - 失败:需要对条件“匹配 DocumentNode”进行一次匹配操作,但没有找到
- c# - 在反序列化嵌套的 xml 数组时遇到问题,任何帮助将不胜感激
- r - R:间隔中的等距点,但不包括端点