Creare una libreria di Controller in ASP.NET Core Web API

di Marco De Sanctis, in ASP.NET Core,

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

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi