Nosso software possui várias classes que devem ser encontradas dinamicamente via reflexão. Todas as classes têm um construtor com uma assinatura específica através da qual o código de reflexão instancia objetos.
No entanto, quando alguém verifica se o método é referenciado (por exemplo, através do Visual studio Code Lens), a referência via reflexão não é contada. As pessoas podem perder suas referências e remover (ou alterar) métodos aparentemente não utilizados.
Como devemos marcar / documentar métodos destinados a serem chamados via reflexão?
Idealmente, o método deve ser marcado de forma que os colegas e o Visual Studio / Roslyn e outras ferramentas automatizadas 'vejam' que o método deve ser chamado por meio de reflexão.
Conheço duas opções que podemos usar, mas ambas não são satisfatórias. Como o Visual Studio não pode encontrar as referências:
- Use um atributo personalizado e marque o construtor com este atributo.
- Um problema é que as propriedades do Atributo não podem ser uma referência de método, portanto, o construtor ainda será exibido como tendo 0 referências.
- Os colegas que não estão familiarizados com o atributo personalizado provavelmente o ignorarão.
- Uma vantagem da minha abordagem atual é que a parte de reflexão pode usar o atributo para encontrar o construtor que deve chamar.
- Use comentários para documentar que um método / construtor deve ser chamado por meio de reflexão.
- As ferramentas automatizadas ignoram os comentários (e os colegas também podem fazê-lo).
- Os comentários da documentação Xml podem ser usados para que o Visual Studio conte uma referência adicional ao método / construtor:
SejaMyPlugin
a classe cujo construtor deve chamar por meio de reflexão. Suponha que o código de reflexão de chamada procure por construtores que usam umint
parâmetro. A documentação a seguir faz com que essa lente de código mostre o construtor com 1 referência:
/// <see cref="MyPlugin.MyPlugin(int)"/> is invoked via reflection
Que melhores opções existem?
Qual é a melhor prática para marcar um método / construtor que se pretende chamar por reflexão?