我编写了一个自定义的DataAnnotations验证器(用于客户端和服务器):

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

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

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

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

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

而且还必须在启动期间注册提供者:

services.AddSingleton<IValidationAttributeAdapterProvider, CustomAttributeAdapterProvider>();

我更简单的方法工作,我甚至不注册它在容器中.

为什么文档显示了更复杂的方法?我的方式是否有一些额外的特征或行为缺失?

推荐答案

我更简单的方法工作,我甚至不注册它在容器中.

为什么文档显示了更复杂的方法?我的方式是否有一些额外的特征或行为缺失?

从你引用的the doc,它列出了103104的区别:

  • 创建一个派生自AttributeAdapterBase<TAttribute>的类, 实现IValidationAttributeAdapterProvider的类,以及 在DI中注册属性和适配器.102.适配器 也有一个优点,因为它注册在DI,103.

  • 在你的ValidationAttribute类中实现IClientModelValidator. This method might be appropriate 102.

Csharp相关问答推荐

如何从C#中有类.x和类.y的类列表中映射List(字符串x,字符串y)?

Unity如何在PlayerPrefs中保存数据?

EF Core判断是否应用了AsSplitQuery()

当我使用NET6作为目标框架时,为什么DotNet使用NET8作为MS包?

应用程序启动器,可 Select 物理屏幕

在命名管道上使用GRPC ASP.NET核心时如何配置命名管道权限

HttpClient 415不支持的媒体类型错误

将内置的OrderedEumable&Quot;类设置为内部类有什么好处?

交替的奇数

为什么方法的值在SELECT方法中不会更改?

C#按名称从类获取属性值类型<;t>;,我需要反射吗?

RX操作员使用先前值进行扫描,信号来自值本身

为什么C#/MSBuild会自发地为不同的项目使用不同的输出路径?

将字符串类型日期输入(yyyy-mm-ddthh:mm:ss)转换为MM/dd/yyyy格式

C#System.Commandline:如何向命令添加参数以便向其传递值?

测试单个对象是否与Func<;T,bool>;匹配

如何使用moq和xUnit对删除操作进行单元测试?

缩写的MonthNames有问题

是否在异步方法中避免Span<;T>;.ToArray()?

如何获取我在SQL中输入的值