在 .NET Standard 中检索 Type 的自定义属性
Retrieve custom attributes of Type in .NET Standard
我想使用 C# 的反射和自定义属性来简化向中央管理注册一系列类型 class(即它提供采用字符串键和 invoking/retrieving 正确的静态方法method/parameter 关联类型)。查看此处和其他地方的其他问题,似乎最好的方法是简单地遍历所有 public 类型的程序集——因为它打算成为一个库——并检查是否每个在将相关值添加到基础字典之前,类型具有适当的属性。反射和迭代肯定会很慢,但我可以接受它,因为它应该只发生一次。
不幸的是,我不知道如何从类型中获取属性。对于方法和程序集,我可以使用 System.Reflection.Extensions
中的 CustomAttributeExtensions.GetCustomAttribute<MyAttribute>(base)
,但这不会为 Type
提供重载; Assembly.GetCustomAttribute(Assembly, Type)
和 this question. Other suggestions use methods on the Type
itself that, from the documentation 中使用的 .IsDefined(...)
方法相同,似乎是从 mscorelib.dll
加载的,但即使添加后它似乎也没有出现在 Intellisense 中参考文献,我不确定 .dll 如何与 .NET Standard 交互(例如,它是否完全降低了在任意平台上 运行 的能力?)
我是不是遗漏了一些明显的东西,或者 Attribute
从 Type
中退缩真的这么难吗?
尝试typeof(YourType).GetTypeInfo().GetCustomAttributes();
我想使用 C# 的反射和自定义属性来简化向中央管理注册一系列类型 class(即它提供采用字符串键和 invoking/retrieving 正确的静态方法method/parameter 关联类型)。查看此处和其他地方的其他问题,似乎最好的方法是简单地遍历所有 public 类型的程序集——因为它打算成为一个库——并检查是否每个在将相关值添加到基础字典之前,类型具有适当的属性。反射和迭代肯定会很慢,但我可以接受它,因为它应该只发生一次。
不幸的是,我不知道如何从类型中获取属性。对于方法和程序集,我可以使用 System.Reflection.Extensions
中的 CustomAttributeExtensions.GetCustomAttribute<MyAttribute>(base)
,但这不会为 Type
提供重载; Assembly.GetCustomAttribute(Assembly, Type)
和 this question. Other suggestions use methods on the Type
itself that, from the documentation 中使用的 .IsDefined(...)
方法相同,似乎是从 mscorelib.dll
加载的,但即使添加后它似乎也没有出现在 Intellisense 中参考文献,我不确定 .dll 如何与 .NET Standard 交互(例如,它是否完全降低了在任意平台上 运行 的能力?)
我是不是遗漏了一些明显的东西,或者 Attribute
从 Type
中退缩真的这么难吗?
尝试typeof(YourType).GetTypeInfo().GetCustomAttributes();