编写 DataAnnotations 自定义验证器的多种方法

问题描述 投票:0回答:1

我编写了一个自定义的

DataAnnotations
验证器(用于客户端和服务器):

public class CustomAttribute : ValidationAttribute, IClientModelValidator { /* ... */ }

然而,docs展示了另一种方法,使用三个类:

public class CustomAttribute : ValidationAttribute { /* ... */ }

public class CustomAttributeAdapter : AttributeAdapterBase<CustomAttribute> { /* ... */ }

public class CustomAttributeAdapterProvider : IValidationAttributeAdapterProvider { /* ... */ }

并且还必须在启动期间注册提供程序:

services.AddSingleton<IValidationAttributeAdapterProvider, CustomAttributeAdapterProvider>();

我的更简单的方法有效,我什至没有将其注册到容器中。

为什么文档显示更复杂的方法?我的方式是否缺少一些额外的功能或行为?

c# asp.net-core .net-core data-annotations asp.net-core-7.0
1个回答
0
投票

我的更简单的方法有效,我什至没有将其注册到容器中。

为什么文档显示更复杂的方法?我的方式是否缺少一些额外的功能或行为?

从您引用的文档中,我们可以发现使用继承自

ValidationAttribute
IClientModelValidator
的自定义验证属性与使用额外的AttributeAdapter和ValidationAttributeAdapterProvider的区别:

  • 创建一个派生自

    AttributeAdapterBase<TAttribute>
    的类并 实现
    IValidationAttributeAdapterProvider
    的类,以及 在 DI 中注册您的属性及其适配器。 这个方法如下 与服务器相关的单一责任原则 客户端相关的验证代码位于单独的类中。适配器 还有一个好处就是,既然是在DI注册的,其他 如果需要,可以使用 DI 中的服务

  • 在您的

    IClientModelValidator
    课程中实施
    ValidationAttribute
    此方法可能合适 如果该属性不执行任何操作 服务器端验证,不需要 DI 的任何服务

© www.soinside.com 2019 - 2024. All rights reserved.