Quando abbiamo a che fare con applicazioni complesse basate su ASP.NET Core Web API, il rischio principale è che il progetto contenente la vera e propria applicazione web cresca a dismisura, diventando alla lunga monolitico e poco manutenibile.
Fortunatamente, con pochissimo sforzo possiamo rendere i nostri progetti modulari, creando gli API controller all'interno di class library e poi referenziandoli dall'applicazione principale. Cerchiamo di capire come fare.
Il primo passo è ovviamente quello di creare un progetto di tipo Class Library, a cui dovremo poi aggiungere una reference al framework ASP.NET Core:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net5.0</TargetFramework> </PropertyGroup> <ItemGroup> <FrameworkReference Include="Microsoft.AspNetCore.App" /> </ItemGroup> </Project>
Come sappiamo, la FrameworkReference inietterà automaticamente tutti gli assembly necessari per ASP.NET Core, uniformandone la versione a quella del framework selezionato, che nel nostro caso è .NET 5.
Immaginiamo ora di aver creato alcuni controller all'interno di questa libreria:
namespace ControllerLibrary { [ApiController] [Route("[controller]")] public class ExternalController : ControllerBase { [HttpGet] public IActionResult Get() { return Ok("From external controller"); } } }
Affinché essi siano visibili dall'applicazione principale, oltre che referenziare il progetto, dovremo aggiungerli come ApplicationPart nella classe Startup:
public void ConfigureServices(IServiceCollection services) { services.AddControllers() .AddApplicationPart(typeof(ExternalController).Assembly); ... }
Il metodo AddApplicationPart necessita della reference all'assembly contenente i controller esterni, a cui possiamo arrivare tramite uno qualsiasi dei tipi definiti nella libreria stessa.
Una volta effettuati questi passaggi, il nostro ExternalController sarà finalmente visibile e invocabile dall'applicazione principale:
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzare i primary constructor in C#
Gestire liste di tipi semplici con Entity Framework Core
Paginare i risultati con QuickGrid in Blazor
Eseguire operazioni con timeout in React
Criptare la comunicazione con mTLS in Azure Container Apps
Utilizzare database e servizi con gli add-on di Container App
Effettuare chiamate con versioning da Blazor ad ASP.NET Core
Applicare il versioning ai nostri endpoint ASP.NET Core Minimal API
Come EF 8 ha ottimizzato le query che usano il metodo Contains
Usare un KeyedService di default in ASP.NET Core 8
Visualizzare le change sul plan di Terraform tramite le GitHub Actions
Verificare la provenienza di un commit tramite le GitHub Actions