我想使用C#的反射和自定义属性来简化使用中央管理类注册一系列类型(即它提供了采用字符串键并调用/检索相关类型的正确方法/参数的静态方法) 。看看这里的其他问题和其他地方的几个地方,似乎最好的方法是简单地遍历所有公共类型的程序集 - 因为它打算成为一个库 - 并检查每种类型是否具有正确的在将相关值添加到基础词典之前的属性。反射和迭代肯定会很慢,但我可以忍受它,因为它应该只发生一次。
不幸的是,我无法弄清楚如何从类型中获取属性。对于方法和程序集,我可以使用CustomAttributeExtensions.GetCustomAttribute<MyAttribute>(base)
中的System.Reflection.Extensions
,但这不会为Type
提供重载; Assembly.GetCustomAttribute(Assembly, Type)
和this question中使用的.IsDefined(...)
方法相同。 Other suggestions使用来自Type
的{{1}}本身的方法,似乎是从mscorelib.dll
加载的,但似乎没有出现在Intellisense中,即使在添加引用之后,我也不确定.dll是如何与.NET Standard交互的(无论如何,它是否会降低在任意平台上运行的能力?)
我是否遗漏了一些显而易见的事情,或者是否真的很难让Attribute
退出Type
?