加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 如何在ASP.NET MVC中提供自己的ICustomTypeDescr

发布时间:2020-12-16 09:34:51 所属栏目:asp.Net 来源:网络整理
导读:我正在为ASP.NET MVC 3开发一个小型库,该库可以提供更好的模型元数据可重用性,并且可以轻松地从数据实体映射到自定义视图模型.为此,我需要能够为ASP.NET MVC中三个不同的感兴趣区域提供我自己的ICustomTypeDescriptor实现: 脚手架 验证 模型绑定 看起来这可
我正在为ASP.NET MVC 3开发一个小型库,该库可以提供更好的模型元数据可重用性,并且可以轻松地从数据实体映射到自定义视图模型.为此,我需要能够为ASP.NET MVC中三个不同的感兴趣区域提供我自己的ICustomTypeDescriptor实现:

>脚手架
>验证
>模型绑定

看起来这可以通过将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,只是为了覆盖一行或两行代码.所以它有效,但它是一个非常混乱的黑客,并可能在下次更新到新的ASP.NET MVC版本时中断.

所以这就是我想知道的:我是否想念任何简单的方法?

奖金问题:如果没有,你来自MVC团队,你能考虑在MVC 4中创建一个合适的扩展点;-)?

编辑:回答问题为什么我需要编写自己的TypeDescriptor代码:有几个原因:
??1.最重要的是:我需要解决https://forums.asp.net/t/1614439.aspx/1中描述的问题
??另外,我需要动态插入元数据,原因有很多.例如,我想编写自己的Bind属性,但BindAttribute是密封的.因此,在检测我自己的绑定属性实现时,我会从TypeDescriptor动态地发出匹配的BindAttribute,而不是从它派生.

解决方法

根据 Brad Wilson(ASP.NET MVC团队成员)的说法,这个问题已经被放在了MVC 4的bug列表中.所以目前似乎没有好的解决方案,但希望这可以在MVC 4发布时解决.

对于任何对我的库感兴趣的可重用验证和脚手架元数据以及模型/视图模型映射的人,请随时在https://devermind.wordpress.com/订阅我的博客.我将在那里发布库.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读