尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

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

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


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

  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,
就能在不改动实体类的前提下,全局、动态、按需地注入绑定规则、显示文案或验证逻辑。

相关新闻

  • 2025 年清理工具应用程序品牌最新推荐榜单:精选适配 macOS 系统的优质系统优化工具,助力高效管理 icloud 与谷歌云储存空间苹果系统清理/云储存清理工具公司推荐
  • 日志不是垃圾:它是系统的生命线
  • 堆空间的GC和元空间的GC

最新新闻

  • 2026苏州钻石回收实测|国标4C定级,全城无套路靠谱门店变现指南 - 薛定谔的梨花猫
  • C语言宽字符处理:wmemcmp、wmemcpy、wprintf核心函数详解与实战
  • 多模态大语言模型LISA
  • 2026长沙回收百达翡丽手表门店分级指南,一线标杆店铺评级,区分正规与小作坊 - 名奢变现站
  • 如何通过WeChatMsg实现微信聊天记录的本地化解析与数据主权保护?
  • 告别GUI开发噩梦:用Dear ImGui在30分钟内为C++项目添加专业界面

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号