私たちのソフトウェアには、リフレクションを介して動的に検出されるいくつかのクラスがあります。すべてのクラスには、リフレクションコードがオブジェクトをインスタンス化する特定のシグネチャを持つコンストラクターがあります。
ただし、誰かがメソッドが参照されているかどうか(Visual Studio Code Lensなどを介して)を確認すると、リフレクションを介した参照はカウントされません。人々はそれらの参照を見逃し、明らかに未使用のメソッドを削除(または変更)することができます。
リフレクションを介して呼び出されるメソッドをマーク/ドキュメント化するにはどうすればよいですか?
理想的には、メソッドは、同僚とVisual Studio / Roslynおよび他の自動化ツールの両方が、メソッドがリフレクションを介して呼び出されることが意図されていることを「確認」するような方法でマークする必要があります。
使用できる2つのオプションを知っていますが、どちらも十分に満足できるものではありません。Visual Studioは参照を見つけることができないので:
- カスタム属性を使用して、この属性でコンストラクタをマークします。
- 問題は、Attributeプロパティをメソッド参照にすることはできないため、コンストラクターは参照が0と表示されることです。
- カスタム属性に慣れていない同僚はおそらくそれを無視するでしょう。
- 私の現在のアプローチの利点は、リフレクションパーツが属性を使用して、呼び出すコンストラクターを見つけることができることです。
- コメントを使用して、メソッド/コンストラクターがリフレクションを介して呼び出されることを意図していることを文書化します。
- 自動化ツールはコメントを無視します(同僚もそうするかもしれません)。
- XMLドキュメントコメントは、 Visual Studioがメソッド/コンストラクタへの追加の参照をカウント持つように使用することができます
させるMyPlugin
そのコンストラクタ反射を経由して起動するためのクラスです。呼び出しリフレクションコードが、int
パラメーターを受け取るコンストラクターを検索するとします。次のドキュメントでは、そのコードlensに、1つの参照を持つコンストラクターを示しています。
/// <see cref="MyPlugin.MyPlugin(int)"/> is invoked via reflection
より良いオプションはどれですか?
リフレクションを介して呼び出されることを意図したメソッド/コンストラクターをマークするためのベストプラクティスは何ですか?