gpt4 book ai didi

asp.net-mvc - 如何在 ASP.NET MVC 中提供我自己的 ICustomTypeDescriptor?

转载 作者:行者123 更新时间:2023-12-04 01:28:02 25 4
gpt4 key购买 nike

我正在为 ASP.NET MVC 3 开发一个小型库,该库应该提供更好的模型元数据可重用性以及从数据实体到自定义 View 模型的轻松映射。为此,我需要能够为 ASP.NET MVC 的三个不同领域提供我自己的 ICustomTypeDescriptor 实现:

  • 脚手架
  • 验证
  • 模型绑定(bind)

  • 似乎这可以通过设置 System.Web.Mvc.ModelMetadataProviders.Current 来完成到我自己的 CustomMetaDataProvider,但这还不足以涵盖以上所有三点。

    问题是 System.Web.Mvc 中有几个类直接调用到这个 System.Web.TypeDescriptorHelper这是不可扩展的,因为它看起来像这样:
    internal static class TypeDescriptorHelper {
    public static ICustomTypeDescriptor Get(Type type) {
    return new AssociatedMetadataTypeTypeDescriptionProvider(type).GetTypeDescriptor(type);
    }
    }

    我发现的唯一解决方案非常笨拙,需要从 System.Web.Mvc 子类化许多类型才能使其工作。我什至不得不重新实现 CustomModelBinderDictionary完全只覆盖一两行代码。所以它可以工作,但它是一个非常困惑的 hack,并且可能会在我下次更新到新的 ASP.NET MVC 版本时中断。

    所以这就是我想知道的 : 我错过了任何简单的方法吗?

    奖金问题 :如果不是,并且您来自 MVC 团队,您是否可以考虑在 MVC 4 中创建一个适当的可扩展点 ;-)?

    编辑:回答为什么我需要编写自己的 TypeDescriptor 的问题:这有几个原因:
    1. 最重要的是:我需要一个解决方法来解决 https://forums.asp.net/t/1614439.aspx/1 中描述的问题。
    2.另外,由于各种原因,我需要动态插入元数据。例如,我想编写自己的 Bind 属性,但 BindAttribute 是密封的。因此,当检测到我自己的绑定(bind)属性实现时,我不是从它派生,而是从 TypeDescriptor 动态发出匹配的 BindAttribute。

    最佳答案

    根据Brad Wilson (一名 ASP.NET MVC 团队成员)这个问题已被列入 MVC 4 的错误列表。所以目前似乎没有好的解决方案,但希望当 MVC 4 出来时会解决这个问题。

    对于任何对我的库感兴趣以进行可重用验证和脚手架元数据和模型/ View 模型映射的人,请随时订阅我的博客 https://devermind.wordpress.com/ .我要在那里释放图书馆。

    关于asp.net-mvc - 如何在 ASP.NET MVC 中提供我自己的 ICustomTypeDescriptor?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5727161/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com