接口(interface)底层对象的C#流利验证

标签 c# azure-functions fluent

我有一个 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 .假设您有验证器 AValidatorBValidator分别为以下类(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/

相关文章:

azure - 您可以从 Visual Studio Mac 创建 Azure Functions 吗?

c# - Builder模式从数据库值而不是参数输入构造对象是否合适

c# - 打开文件并加载它

c# - 程序集属性去哪里了?

azure - 在 Azure 函数中使用字体

Azure 存储队列客户端不会将消息放入有害队列中

sql - Laravel 4 查询生成器在 "from"子句中不支持多个表

database - 在数据库中存储枚举值的最佳方式 - String 或 Int

c# - 国际奥委会设计资源

任何 IEnumerable 的 C# EmptyIfNull 扩展返回空派生类型