c# - GetTypeDescriptor(Type objectType, object instance) 永远不会被调用?
问题描述
我不太确定 .NET 中的类似代码,但我对 .NET Standard 或 .NET Core 感兴趣,我的自定义CustomTypeDescriptor
从来没有机会被注入/使用,因为自定义TypeDescriptionProvider
似乎不起作用,这里是简单的实现(实际上还没有添加任何自定义逻辑):
public class CustomTypeDescProvider : TypeDescriptionProvider
{
public override ICustomTypeDescriptor GetTypeDescriptor(Type objectType, object instance)
{
//set breakpoint here and wait forever for its jumping in.
return base.GetTypeDescriptor(objectType, instance);
}
}
我试过像这样添加自定义描述提供程序:
public class MyType {
static MyType(){
TypeDescriptor.AddProvider(new CustomTypeDescProvider(), typeof(MyType));
}
//...
}
以及使用TypeDescriptionProviderAttribute
这样的:
[TypeDescriptionProvider(typeof(CustomTypeDescProvider))]
public class MyType {
//...
}
它永远不会到达我在里面设置的断点GetTypeDescriptor(Type objectType, object instance)
。因此,据我所知,至少在任何代码访问类型的元数据信息(属性、属性……,例如通过使用反射)时应该调用它MyType
,但它似乎总是使用默认提供程序。
没有任何异常告诉我Hey your code will not work, stop hoping for it working
,实际上我什至可以看到这个事件TypeDescriptor.Refreshed
在调用之后触发TypeDescriptor.AddProvider
,据记录意味着它成功了,真的很荒谬,也许我不明白它对所谓的成功的定义。
你能给我解释一下它在这种情况下不起作用吗?难道我们没有办法让它发挥作用吗?这对我来说尤其重要,因为我的库项目不依赖于某些依赖项。谢谢!
更新:我希望我的代码在使用反射时应该运行并提供自定义元数据信息(例如属性):
var attrs = typeof(MyType).GetCustomAttributes();
但是我刚刚意识到,它TypeDescriptor
提供了另一种元数据存储,只能通过TypeDescriptor
(而不是通过反射)访问,如下所示:
var attrs = TypeDescriptor.GetAttributes(typeof(MyType));
好吧,如果是这样,那就没用了 =)) ,我们知道这Reflection
是一种非常流行的提取元数据的方法,提供了一个标准的 API 来访问元数据,所有库都将使用反射,所以我们需要一些魔法来注入反射的流程, 不进入TypeDescriptor
's 流。真的让我很困惑,我真的认为这TypeDescriptor
是一个与反射密切相关的强大工具,但看起来它只是另一个非常不同的东西。
解决方案
推荐阅读
- android - 无法更改微调器日期选择器的确认和取消按钮的颜色 android react native
- android - 我想用 kotlin soundPool 加载多个声音源文件
- kubernetes - 如何负载平衡在 2 个 Pod 上运行的有状态应用程序
- javascript - 如果数据存在并在 JQuery 中自动更改今天日期,则今天日期在 datepicker 中突出显示
- javascript - 在 javascript 中从 php 获取 json_encode
- java - 当我们将其设置为高优先级时,Daemon 线程的行为如何?
- javascript - 如何在对象数组中找到对象?
- java - 如何在 Spring Boot 中使用 KafkaTemplate 创建多个生产者,每个生产者用于不同的 Kafka 服务器
- python - 如果用户输入不在范围内,如何使用while循环?
- sql-server - 间歇性数据库连接错误 - RDS - MSSQL