Notre logiciel a plusieurs classes qui devraient être trouvées dynamiquement via la réflexion. Les classes ont toutes un constructeur avec une signature spécifique via laquelle le code de réflexion instancie les objets.
Cependant, lorsque quelqu'un vérifie si la méthode est référencée (par exemple via Visual studio Code Lens), la référence via réflexion n'est pas comptée. Les gens peuvent manquer leurs références et supprimer (ou modifier) des méthodes apparemment inutilisées.
Comment marquer / documenter les méthodes destinées à être appelées par réflexion?
Idéalement, la méthode devrait être marquée de telle manière que les collègues et Visual Studio / Roslyn et d'autres outils automatisés «voient» que la méthode est destinée à être appelée via la réflexion.
Je connais deux options que nous pouvons utiliser, mais les deux ne sont pas tout à fait satisfaisantes. Étant donné que Visual Studio ne peut pas trouver les références:
- Utilisez un attribut personnalisé et marquez le constructeur avec cet attribut.
- Un problème est que les propriétés d'attribut ne peuvent pas être une référence de méthode, par conséquent le constructeur affichera toujours comme ayant 0 références.
- Les collègues qui ne connaissent pas l'attribut personnalisé l'ignoreront probablement.
- Un avantage de mon approche actuelle est que la partie réflexion peut utiliser l'attribut pour trouver le constructeur qu'elle doit appeler.
- Utilisez des commentaires pour documenter qu'une méthode / constructeur doit être appelé via la réflexion.
- Les outils automatisés ignorent les commentaires (et les collègues peuvent également le faire).
- Les commentaires de documentation Xml peuvent être utilisés pour que Visual Studio compte une référence supplémentaire à la méthode / constructeur:
SoitMyPlugin
la classe dont le constructeur à invoquer via la réflexion. Supposons que le code de réflexion appelant recherche les constructeurs qui prennent unint
paramètre. La documentation suivante fait que la lentille de code montre le constructeur ayant 1 référence:
/// <see cref="MyPlugin.MyPlugin(int)"/> is invoked via reflection
Quelles meilleures options existent?
Quelle est la meilleure pratique pour marquer une méthode / un constructeur qui doit être appelé via la réflexion?