Skip to content

[Source Generator] Registrazione automatica degli endpoint definiti in librerie esterne #103

@marcominerva

Description

@marcominerva

Il Source Generator attualmente registra automaticamente gli endpoint tramite il metodo app.MapEndpoints() per tutte le classi presenti nel progetto principale che implementano l'interfaccia IEndpointRouteHandlerBuilder. Tale interfaccia è creata automaticamente dal Source Generator stesso. Tuttavia, non consente di rilevare ed esporre automaticamente endpoint definiti in librerie esterne.

Proposta di feature:
Sarebbe utile estendere il Source Generator in modo che possa rilevare automaticamente le classi che implementano IEndpointRouteHandlerBuilder anche nelle librerie esterne referenziate dal progetto Minimal API (senza ricorrere a soluzioni reflection come MapEndpointsFromAssembly). Ciò permetterebbe di registrare in modo performante e compatibile con Native AOT endpoint definiti in qualsiasi progetto referenziato, migliorando modularità, riuso del codice e organizzazione.

Scenario d'uso desiderato:

  1. Definisco una classe endpoint in una libreria esterna:
    namespace MyEndpointsLibrary.Endpoints;
    
    public class PeopleEndpoints : IEndpointRouteHandlerBuilder
    {
        public static void MapEndpoints(IEndpointRouteBuilder endpoints)
        {
            endpoints.MapGet("/api/people", GetList);
            // ...
        }
    }
  2. Referenzio questa libreria dal progetto principale.
  3. Invocando app.MapEndpoints();, il Source Generator registra automaticamente anche gli endpoint definiti in librerie esterne, senza necessità di ulteriori chiamate, overload o uso della reflection.

Vantaggi:

  • Non è più necessario duplicare la definizione degli endpoint nel progetto principale.
  • Permette progetti più modulari e condivisibili.
  • Mantenimento della compatibilità Native AOT e dei vantaggi prestazionali del Source Generator.

Attualmente è possibile solo con le classi presenti nel progetto principale. Vorrei che il Source Generator lavorasse anche con le classi IEndpointRouteHandlerBuilder definite in progetti esterni referenziati.

Metadata

Metadata

Labels

enhancementNew feature or request

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions