当前位置: 首页 > news >正文

元数据提供器(IMetadataDetailsProvider)是什么

IMetadataDetailsProvider 并不是“一个”接口,而是所有“模型元数据提供器”的统称/标记接口。
它本身空无一物,真正的职责由下面三个“子接口”分担:
  • IBindingMetadataProvider → 决定“能不能绑、谁来绑”
  • IDisplayMetadataProvider → 决定“显示名、模板、顺序”
  • IValidationMetadataProvider → 决定“要验证什么、用什么规则”
框架在第一次遇到某个类型或属性时,会依次调用这些接口的实现,把收集到的“细节”写进同一个 ModelMetadata 对象,然后缓存起来供整个 ASP.NET Core 管道使用。

  1. 定义——空接口,只是“标记”


public interface IMetadataDetailsProvider { }
 
文档原话:
“有关模型对象的元数据详细信息提供程序的标记接口。实现应实现 IBindingMetadataProviderIDisplayMetadataProviderIValidationMetadataProvider 中的一个或多个。”
 

  1. 工作位置——在 ModelMetadata 被创建时

  1. 启动阶段:
    DefaultModelMetadataProvider 反射拿到类型/属性 → 新建 MetadataDetails 对象。
  2. 运行阶段:
    MvcOptions.ModelMetadataDetailsProviders 集合里所有实现了上述子接口的实例跑一遍,让它们往 Details 里写数据。
  3. 合成阶段:
    用写满的 Details 构造出最终的 ModelMetadata 并全局缓存。

  1. 常见“真身”——你写的其实就是这三个

表格
子接口典型用途关键方法
IBindingMetadataProvider 禁用绑定、指定自定义绑定器 void CreateBindingMetadata(BindingMetadataProviderContext)
IDisplayMetadataProvider 改 DisplayName、模板、顺序 void CreateDisplayMetadata(DisplayMetadataProviderContext)
IValidationMetadataProvider 动态加验证特性 void CreateValidationMetadata(ValidationMetadataProviderContext)
一个类可以同时实现多个接口,一次性把绑定+显示+验证的规则全部注入。

  1. 代码例子——让所有 string 属性自动拥有 [StringLength(100)]

 
public class StringLength100Provider : IValidationMetadataProvider
{public void CreateValidationMetadata(ValidationMetadataProviderContext ctx){if (ctx.Key.ModelType == typeof(string) &&!ctx.ValidationMetadata.ValidatorMetadata.OfType<StringLengthAttribute>().Any()){ctx.ValidationMetadata.ValidatorMetadata.Add(new StringLengthAttribute(100));}}
}// 全局注册
builder.Services.AddMvc(o =>o.ModelMetadataDetailsProviders.Add(new StringLength100Provider()));
 
注册后,任何实体类的 string 属性都会凭空多一条 StringLength(100) 验证,无需在实体上硬编码特性。

  1. 一句话总结

IMetadataDetailsProvider 就是 ASP.NET Core 模型绑定/验证/显示管线里的“插件总线”——
你自己实现它的三个子接口中的任意组合,再扔进 MvcOptions.ModelMetadataDetailsProviders
就能在不改动实体类的前提下,全局、动态、按需地注入绑定规则、显示文案或验证逻辑。
http://www.rkmt.cn/news/17574.html

相关文章:

  • 2025 年清理工具应用程序品牌最新推荐榜单:精选适配 macOS 系统的优质系统优化工具,助力高效管理 icloud 与谷歌云储存空间苹果系统清理/云储存清理工具公司推荐
  • 日志不是垃圾:它是系统的生命线
  • 堆空间的GC和元空间的GC
  • word快速调整某列宽度
  • word设置表格内容自动调整
  • 2025 年最新壳寡糖厂家权威推荐排行榜:聚焦水溶性、高纯度、酶解型产品,为农化企业等下游客户精准筛选优质合作方多级别/农业级/多功能壳寡糖/壳寡糖水溶肥公司推荐
  • 图表全能王新增支持K线图,数据分析更强大!
  • 2025 最新推荐:AI 写小说工具公司口碑排行榜,聚焦卓越品质与新锐实力的权威指南
  • Gitee领航本土DevOps平台发展新纪元:数字化转型中的中国方案
  • Gitee崛起背后:本土项目管理工具如何重塑中国技术团队工作模式
  • 基于MATLAB的三维六面体有限元网格模型
  • 2025 年编码器源头厂家最新推荐榜单:聚焦无磁 / 光学 / 脉冲 / 绝对型等多类型编码器,精选优质企业助力采购决策
  • 2025 年绝对式编码器源头厂家最新推荐榜单:增量 / 多圈 / 二进制 /ssi/ 拉线型产品优质企业全面盘点
  • go.work工作区
  • 2025 年别墅电梯优质厂家最新推荐排行榜:聚焦技术安全与市场口碑,助力业主精准选购家用/自建房/电梯维修/电梯加装/电梯改造/老旧小区加装电梯厂家推荐
  • 跨网文件摆渡系统是什么?你想了解的问题都在这!
  • 从零开始:C#实现计算表达式解析与求值——以后缀表达式为例
  • 第五届无线通信、网络与物联网国际学术会议
  • 详细学习 HTML5 Canvas 这一篇文章就够了
  • 2025 年国内包装印刷制造厂家最新推荐排行榜:聚焦设备、团队与服务,精选优质企业助力合作决策礼盒/定制/设计/优质/品质包装印刷厂家推荐
  • 2025 年最新推荐!国内空调机组厂家权威排行榜,含冷凝热回收等多类型机组优选指南直膨式净化/变风量/远程射流/转轮热回收/恒温恒湿空调机组厂家推荐
  • 多智能体强化学习算法(MAPPO)
  • 实用指南:ubuntu开机自动挂载windows下的硬盘
  • 【一步步开发AI运动APP】十二、自定义扩展新运动项目2
  • if 和 else 的用法
  • MySQL 高可用构建方案详解
  • VMware ESXi 9.0.1.0 macOS Unlocker OEM BIOS 2.7 标准版和厂商定制版
  • PHP 图像处理实战 GD/Imagick 从入门到精通,构建高性能图像服务
  • 2025氧化镁厂家、活性氧化镁厂家、肥料级氧化镁厂家最新推荐榜:实力生产与优质供应之选
  • 2025深圳电源适配器厂家最新推荐榜:高效耐用与安全认证深度解析