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
Eseguire query manipolando liste di tipi semplici con Entity Framework Core
Limitare le richieste lato server con l'interactive routing di Blazor 8
Determinare lo stato di un pod in Kubernetes
Gestire errori funzionali tramite exception in ASP.NET Core Web API
Usare il versioning con i controller di ASP.NET Core Web API
Utilizzare database e servizi con gli add-on di Container App
Trasformare qualsiasi backend in un servizio GraphQL con Azure API Management
Configurare dependabot per aggiornare le dipendenze di terze parti con GitHub Actions
Copiare automaticamente le secret tra più repository di GitHub
Utilizzare domini personalizzati gestiti automaticamente con Azure Container Apps
Cambiare la chiave di partizionamento di Azure Cosmos DB
Utilizzare i primary constructor in C#