2017-02-22 8 views
3

C#のリフレクションとカスタム属性を使用して、一連のタイプを集中管理クラスに簡単に登録することができます(つまり、静的メソッドを使用して文字列キーを取得し、関連する型の適切なメソッド/パラメータ)。他の質問や他の場所を見ると、ライブラリーになることを意図しているので、アセンブリのすべてのパブリックタイプを繰り返し処理し、各タイプに適切なものがあるかどうかを確認するのが最善の方法です関連する値を基礎となる辞書に追加する前に反射と反復は間違いなく遅くなりますが、一度しか起こらないので、私はそれを生きることができます。.NET標準でTypeのカスタム属性を取得する

残念ながら、タイプから属性を取得する方法がわかりません。メソッドとアセンブリについては、System.Reflection.ExtensionsCustomAttributeExtensions.GetCustomAttribute<MyAttribute>(base)を使用できますが、Typeのオーバーロードはありません。 this questionで使用されるAssembly.GetCustomAttribute(Assembly, Type).IsDefined(...)の方法についても同じです。 Othersuggestionsthe documentationからTypeのメソッドを使用すると、mscorelib.dllからロードされているように見えますが、参照を追加してもIntellisenseに表示されていないようで、その.dllがどのように相互作用するかわかりません。とにかく(任意のプラットフォームで実行する能力を低下させますか?)

明白な何かがありませんか?AttributeTypeに戻すのは本当に難しいですか?

+0

はあなたが ')(' GetCustomAttributes呼び出そうとする方法の例を表示することができます試してみてください? –

+0

@RenéVogtこれは、 'CustomAttributeExtensions.GetCustomAttribute (base)'が( 'base'は私がテストしようとしていた' Type')のものでしたが、より良い告知され、少しのコンテキストを含めることができたと認めます。いずれにせよ、Connellの答えが働いた。 – WovenTales

答えて

4

typeof(YourType).GetTypeInfo().GetCustomAttributes();

+0

ああ、それは持っている!明らかに 'Info'がかなり重要です。今私の唯一の疑問は、なぜ私は他の答えのいずれかでそれを見ていないということです。ありがとう! – WovenTales

+0

これは、.netフレームワークのGetType()で動作します。 .netコアにはGetTypeInfo()が必要です。 –

+0

それは理にかなっています。 .NET CoreとStandardの背後にある考え方が大好きですが、ドキュメンテーションが少し薄いと感じることはできません。 – WovenTales

関連する問題