Il nostro software ha diverse classi che dovrebbero essere trovate dinamicamente tramite la riflessione. Le classi hanno tutte un costruttore con una firma specifica tramite la quale il codice di riflessione crea un'istanza degli oggetti.
Tuttavia, quando qualcuno controlla se il metodo è referenziato (ad esempio tramite Visual Studio Code Lens), il riferimento tramite riflessione non viene conteggiato. Le persone possono perdere i loro riferimenti e rimuovere (o modificare) i metodi apparentemente inutilizzati.
Come dovremmo marcare / documentare i metodi che si intendono chiamare tramite riflessione?
Idealmente, il metodo dovrebbe essere contrassegnato in modo tale che sia i colleghi che Visual Studio / Roslyn e gli altri strumenti automatici "vedano" che il metodo debba essere chiamato tramite riflessione.
Conosco due opzioni che possiamo usare, ma entrambe non sono abbastanza soddisfacenti. Poiché Visual Studio non riesce a trovare i riferimenti:
- Utilizza una personalizzata) Attributo e contrassegna il costruttore con questo attributo.
- Un problema è che le proprietà degli attributi non possono essere un riferimento al metodo, quindi il costruttore mostrerà ancora come 0 riferimenti.
- I colleghi che non hanno familiarità con l'attributo personalizzato probabilmente ignoreranno esso.
- Un vantaggio del mio attuale approccio è la parte di riflessione che può essere utilizzata l'attributo per trovare il costruttore che dovrebbe chiamare.
- Utilizza i commenti per documentare che un metodo / costruttore è destinato a essere chiamato tramite riflessione.
- Gli strumenti automatici ignorano i commenti (e anche i colleghi potrebbero farlo).
-
Commenti della documentazione Xml possono essere utilizzati contare su Visual Studio
un ulteriore riferimento al metodo / costruttore:
Lascia cheMyPlugin
sia la classe il cui costruttore invoca tramite reflection. Supponiamo che il richiamo del codice di riflessione cerchi i costruttori che prendono un parametroint
. La seguente documentazione rende questo codice obiettivo mostra al costruttore 1 riferimento:
/// <see cref="MyPlugin.MyPlugin(int)"/> is invoked via reflection
Quali opzioni migliori esistono?
Qual è la migliore pratica per contrassegnare un metodo / costruttore che si intende chiamare tramite riflessione?