Eu tenho uma arquitetura de plugin onde uso o app.MapRazorComponents<MyApp>().AddAdditionalAssemblies()
método para adicionar os assemblies do plugin ao mapeamento de páginas do Razor.
Não é garantido que os plug-ins incluam nenhuma página, portanto, desejo apenas adicionar assemblies que contenham arquivos com a @page
diretiva.
Fiz algumas depurações para descobrir que as classes geradas para os .razor
arquivos possuem o [Microsoft.AspNetCore.Components.RouteAttribute]
conjunto, então acho que a @page
diretiva foi traduzida em um [Route]
atributo.
O [Route]
atributo, porém, também pode ser utilizado em Controllers, que são adicionados de forma diferente ( .MapControllers()
), portanto, apenas utilizar este atributo como marcador não é suficiente.
Eu provavelmente poderia excluir tipos que também possuem o [ApiController]
atributo ou adicionar verificações para ainda mais atributos (ou heranças), mas sinto que isso pode rapidamente sair do controle.
Isso está no .NET 8 usando o modelo Blazor Web App com modo de renderização de servidor.
Existe uma maneira de verificar se um assembly contém algum .razor
arquivo (sejam páginas ou componentes) ou, alternativamente, verificar se um assembly é uma "Biblioteca de Classes Razor" ou não apenas uma "Biblioteca de Classes"?
Este é o mesmo método usado para detectar páginas razor como o
AddAdditionalAssemblies
método.