Unsere Software verfügt über mehrere Klassen, die dynamisch über Reflexion gefunden werden sollten. Die Klassen haben alle einen Konstruktor mit einer bestimmten Signatur, über die der Reflektionscode Objekte instanziiert.
Wenn jedoch jemand prüft, ob auf die Methode verwiesen wird (z. B. über Visual Studio Code Lens), wird die Referenz über Reflection nicht gezählt. Menschen können ihre Referenzen verpassen und scheinbar nicht verwendete Methoden entfernen (oder ändern).
Wie sollen Methoden markiert / dokumentiert werden, die durch Reflexion aufgerufen werden sollen?
Idealerweise sollte die Methode so gekennzeichnet sein, dass sowohl Kollegen als auch Visual Studio / Roslyn und andere automatisierte Tools „sehen“, dass die Methode über Reflektion aufgerufen werden soll.
Ich kenne zwei Optionen, die wir verwenden können, aber beide sind nicht ganz zufriedenstellend. Da Visual Studio die Referenzen nicht finden kann:
- Verwenden Sie ein benutzerdefiniertes Attribut und markieren Sie den Konstruktor mit diesem Attribut.
- Ein Problem besteht darin, dass Attributeigenschaften keine Methodenreferenz sein können. Daher zeigt der Konstruktor weiterhin 0 Referenzen an.
- Kollegen, die mit dem benutzerdefinierten Attribut nicht vertraut sind, werden es wahrscheinlich ignorieren.
- Ein Vorteil meines aktuellen Ansatzes ist, dass der Reflexionsteil das Attribut verwenden kann, um den Konstruktor zu finden, den er aufrufen soll.
- Verwenden Sie Kommentare, um zu dokumentieren, dass eine Methode / ein Konstruktor über Reflektion aufgerufen werden soll.
- Automatisierte Tools ignorieren Kommentare (und Kollegen tun dies möglicherweise auch).
- XML-Dokumentationskommentare können verwendet werden, damit Visual Studio einen zusätzlichen Verweis auf die Methode / den Konstruktor zählt:
SeiMyPlugin
die Klasse, deren Konstruktor über Reflektion aufgerufen werden soll. Angenommen, der aufrufende Reflection-Code sucht nach Konstruktoren, die einenint
Parameter annehmen . In der folgenden Dokumentation wird gezeigt, dass das Codeobjektiv den Konstruktor mit 1 Referenz zeigt:
/// <see cref="MyPlugin.MyPlugin(int)"/> is invoked via reflection
Welche besseren Möglichkeiten gibt es?
Was ist die beste Vorgehensweise zum Markieren einer Methode / eines Konstruktors, die bzw. der über Reflexion aufgerufen werden soll?