【问题标题】:AssociatedMetadataProvider in ASP.NET CoreASP.NET Core 中的关联 MetadataProvider
【发布时间】:2025-11-29 17:05:01
【问题描述】:

在 .Net Core 中哪里可以找到 AssociatedMetadataProvider? 或者有没有办法在 DefaultModelMetadataProvider 中实现 GetTypeDescriptor

在 MVC 5 中,DataAnnotationsModelMetadataProvider 继承自 AssociatedMetadataProvider,后者有一个 GetTypeDescriptor 方法。

似乎这个类(AssociatedMetadataProvider)被完全删除了:-(

任何建议都会非常好。


我在 Mvc 5 中是如何做到的?

    public class CustomMetadataProvider : DataAnnotationsModelMetadataProvider
{
    protected override ICustomTypeDescriptor GetTypeDescriptor(Type type)
    {
        if (WhatEver)
        { return new MyICustomTypeDescriptor();}
        return base.GetTypeDescriptor(type);
    }
}

注册:

全球.asax

 ModelMetadataProviders.Current = new CustomMetadataProvider();

【问题讨论】:

  • 只是你要使用的GetTypeDescriptor方法吗?
  • 我想重写 GetTypeDescriptor 方法 ;)。但是这个方法已经不存在了。而且我现在不知道如何实现这种行为。链接:docs.microsoft.com/en-us/dotnet/api/…

标签: asp.net-core modelmetadata typedescriptor


【解决方案1】:

确实,.Net Core 中没有AssociatedMetadataProvider。然而,他们给我们IModelMetadataProvider 留下了您可能使用的抽象类ModelMetadataProvider,尤其是在您需要覆盖某些方法时。您可能还注意到提供了一个实现DefaultModelMetadataProvider,它有一个方法GetMetadataForType(Type)。它将返回ModelMetadata,这仍然不是您需要的。但是这个类有一个名为GetModelExplorerForType() 的方法,它返回一个ModelExplorer 的实例。此实例应该包含您需要的所有信息,格式略有不同。
我希望它有帮助:)

【讨论】: