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

news/2025/10/9 11:48:26/文章来源:https://www.cnblogs.com/Dongmy/p/19130791
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.mzph.cn/news/932497.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

山西省建设监理协会网-官方网站php 快速网站开发

222. 完全二叉树的节点个数 题解&#xff1a; 使用递归的方法来解决这个问题。完全二叉树的节点个数可以通过以下公式计算&#xff1a; 节点个数 左子树节点个数 右子树节点个数 1&#xff08;根节点&#xff09; 首先&#xff0c;我们需要定义一个辅助函数countNodes(r…

2025 年清理工具应用程序品牌最新推荐榜单:精选适配 macOS 系统的优质系统优化工具,助力高效管理 icloud 与谷歌云储存空间苹果系统清理/云储存清理工具公司推荐

在当下数字化办公与生活场景中,MacBook 等苹果电脑已成为众多用户的核心设备,长期使用后,系统内易堆积大量垃圾文件、冗余数据,icloud 与谷歌云储存空间也常面临管理难题,导致设备运行卡顿、存储告急,严重影响使…

网站常规后台阿里云做网站买什么

前言 项目中有一个需求&#xff0c;就是需要绘制一个圆&#xff0c;并且绘制的时候还要设置方位角&#xff0c;最后返回圆的坐标集合和方位角。本功能使用Leaflet-GeomanTurf.jsleaflet实现。 方位角简介 在陆地导航中&#xff0c;方位角通常表示为 alpha、α&#xff0c;并定…

cursor 开了 pro 没办法使用 claude 模型

可以参考这个链接:https://juejin.cn/post/7528678528477429823 亲测有效果 或者用我的,跟这个是一样的步骤。 点进去 settings.json 文件,加下面这个配置"http.proxy": "http://127.0.0.1:7978&qu…

湖州建设局网站深圳网站维护有限公司

SRS早就具备了SFU的能力&#xff0c;比如一对一通话、多人通话、直播连麦等等。在沟通中&#xff0c;一对一是常用而且典型的场景&#xff0c; 让我们一起来看看如何用SRS做直播和RTC一体化的一对一通话。 一、启动windows7-docker 二、拉取SRS镜像 执行命令:docker pull oss…

从0开始使用LabVIEW操作数据采集卡-概述和新建新建项目

概述 由于LabVIEW强大的可视化和分析功能,其在数据采集卡行业有着广泛的应用,本文以北京中泰联创科技有限公司的EM9316BD-16为例来说明如何使用LabVIEW编写一个能够显示16通道模拟数据的程序。本文的阅读对象是不懂L…

当开发者学会拒绝

开发者常被要求“再加个功能”“顺便优化一下”“能不能兼容旧版”。 出于责任感,我们往往答应下来——结果就是无尽的加班与混乱。 但随着经验的积累,我学会了说“不”。 拒绝不是逃避,而是对项目质量负责。 我开始…

日志不是垃圾:它是系统的生命线

许多初级开发者认为日志只是“调试时顺便打印一下”的东西。 但在真正的生产系统中,日志是生命线。 日志不仅能记录错误,还能揭示趋势、捕捉瓶颈、追踪用户行为。 我见过一个例子:系统响应变慢,却没有任何报错。 最…

堆空间的GC和元空间的GC

目录堆空间的GC和元空间的GC核心区别对比工作原理的本质区别堆GC(新生代/老年代)元空间GC执行过程的区别堆GC的执行流程元空间GC的执行流程实际运行中的交互场景1:Full GC触发元空间GC场景2:元空间不足触发Full GC…

2025 涿州装修公司最新推荐权威榜:高性价比品牌精选及靠谱选择指南

在涿州装修市场快速发展的当下,各类装修公司数量激增,但行业乱象却让业主倍感困扰:合同暗藏猫腻、施工偷工减料、工期无限拖延、增项收费频发等问题屡见不鲜,不少业主因选错服务商陷入纠纷。为破解这一难题,我们基…

百度网站两两学一做心得体会网站建设中数据字典

categories:架构author: mrzhoutags:SpringBootredissession单点登录基于SpringBootRedis的Session共享与单点登录前言使用Redis来实现Session共享&#xff0c;其实网上已经有很多例子了&#xff0c;这是确保在集群部署中最典型的redis使用场景。在SpringBoot项目中&#xff0c…

网站制作主题思路湘潭网站建设 水平磐石网络

提要 窗口大小不变&#xff0c;窗口的左上角坐标中的x或者y变动。 误区 函数setX,setY与函数moveLeft,moveTop。其中setX,setY在设置左上角坐标的时候会将窗口的大小变化&#xff0c;相当于窗口进行了拉伸或者缩放&#xff0c;而moveLeft,moveTop设置左上角坐标中的x与y时&a…

排查服务器磁盘IO瓶颈脚本 - 实践

排查服务器磁盘IO瓶颈脚本 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&q…

2025 年板材源头厂家最新推荐排行榜:聚焦 ENF 级环保、零醛添加等优质板材,精选实力企业助您精准选购零醛添加/装修/生态板/指接板/直拼板板材PET实木板材厂家推荐

在当前建材市场中,板材产品种类繁杂,质量参差不齐,消费者与采购商在选购时常常面临诸多困扰。传统板材存在的环保不达标、易燃、施工复杂等问题,不仅影响使用安全与健康,还可能增加成本与延误工期。为帮助大家摆脱…

Motion Bro 必备AE/PR特效预设脚本全新汉化版本支持Win/Mac安装教程

Motion Bro可以说是玩AE/PR软件必备的强大,特效包装预设脚本,这次给大家带来了非常丰富的特效资源库,下面直接看即可。软件测试调试版本是AE/PR2023以上,支持系统Win/Mac。 Motion Bro预设安装教程 👉👉↓载:…

网站建设的实验结论网站推广协议

介绍eBPF技术 当代计算机系统中&#xff0c;性能、安全性和可观察性是至关重要的关键因素。为了应对这些挑战&#xff0c;Linux 内核引入了一种名为eBPF&#xff08;extended Berkeley Packet Filter&#xff09;的强大技术。eBPF 不仅仅是一种网络数据包过滤器&#xff0c;它…

做企业网站都需要注意哪点做北美市场的外贸网站

166. 分数到小数 给定两个整数&#xff0c;分别表示分数的分子 numerator 和分母 denominator&#xff0c;以 字符串形式返回小数 。 如果小数部分为循环小数&#xff0c;则将循环的部分括在括号内。 如果存在多个答案&#xff0c;只需返回 任意一个 。 对于所有给定的输入…

世界的物质性及发展规律

世界的物质统一性原理是辩证唯物主义最基本,最核心的观点,是马克思主义的基石物质运动总是在一定的时间和空间中进行的,没有离开物质运动的纯粹时间和空间,也没有离开时间和空间的物质运动 物质运动和时间空间的不…

word快速调整某列宽度

调整某列宽度!AI真的好使,以下是直接搬运的,作为个人记录。方法一:直接拖拽(最直观、最快) 这是最推荐也是最常用的方法。移动鼠标:将鼠标光标悬停在您想要调整宽度的列的右边框线上。光标会变成一个左右双向箭…

word设置表格内容自动调整

使用VBA宏(一劳永逸,最快)按 Alt + F11 打开VBA编辑器。 在左侧“工程资源管理器”中,双击您当前的文档(例如 Document1 或 你的文件名)。 在弹出的右侧代码窗口中,粘贴以下代码:Sub AutoFitAllTablesToWindow…