GetTypeDescriptor(Type objectType,object instance)永远不会被调用?

时间:2019-05-29 16:42:49

标签: c# .net reflection .net-standard typedescriptor

我不太确定.NET中的类似代码,但是我对.NET Standard或.NET Core感兴趣,我的自定义CustomTypeDescriptor从未有机会被注入/使用,因为自定义{ {1}}似乎不起作用,这是一个简单的实现(实际上尚未添加任何自定义逻辑):

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,据记录,这意味着 成功 ,真的很荒谬,也许我不理解它对所谓的 成功 的定义。

在这种情况下,您不能给我任何解释吗?我们没有办法使它起作用吗?这对我来说尤其重要,以使我的库项目不依赖某些依赖项。谢谢!

UPDATE : 我希望使用这样的反射时,我的代码应该运行并提供自定义的元数据信息(例如属性):

TypeDescriptor.AddProvider

但是我刚刚意识到,var attrs = typeof(MyType).GetCustomAttributes(); 似乎提供了另一种元数据存储,只能通过TypeDescriptor(不能通过反射)访问元数据,像这样:

TypeDescriptor

好吧,如果没用=)),我们知道var attrs = TypeDescriptor.GetAttributes(typeof(MyType)); 是一种非常流行的提取元数据的方法,提供了一种标准的API来访问元数据,所有库都将使用反射,所以我们需要注入反射流而不是Reflection流的一些魔力。确实让我感到困惑,我真的以为TypeDescriptor是一些功能强大的工具,与反射功能有着很强的联系,但看起来却是另一回事。

0 个答案:

没有答案