Dopo aver visto cos’è .NET Aspire e perché rappresenta un’evoluzione importante nello sviluppo cloud native, è il momento di mettere le mani in pasta. In questo articolo vedremo come creare il nostro primo progetto Aspire, analizzando la struttura generata, i file principali e il modo in cui i progetti interagiscono tra loro.
Installazione e setup
Per iniziare, assicurati di avere installato:
Con questi prerequisiti a posto, puoi creare una nuova soluzione Aspire direttamente da terminale:
dotnet new aspire-starter -n MyAspireApp
Questo comando crea una soluzione con la seguente struttura:
MyAspireApp/
├─ MyAspireApp.AppHost/ # il cuore dell'applicazione
├─ MyAspireApp.ServiceDefaults/ # configurazioni condivise
├─ MyAspireApp.Web/ # un progetto web di esempio
└─
MyAspireApp.sln # soluzione
principale
I progetti generati
Vediamo nel dettaglio cosa contiene questa struttura:
Avviare l’applicazione
Una volta creato il progetto, puoi eseguirlo con:
dotnet run --project MyAspireApp.AppHost
Vedrai comparire nella console i log di Aspire e subito dopo si aprirà la dashboard web, di default su http://localhost:18888.
Questa dashboard ti mostra:
Aggiungere una risorsa
Per capire meglio come funziona, aggiungiamo un database Redis al nostro AppHost.
👉 Dentro AppHost/Program.cs:
var builder = DistributedApplication.CreateBuilder(args);
//Aggiungiamo Redis come container builder.AddContainer("redis","redis:7.2")
.WithEndpoint("tcp", 6379);
// Aggiungiamo il progetto Web e colleghiamolo a Redis builder.AddProject<Projects.MyAspireApp_Web>("web")
.WithReference("redis");
builder.Build().Run();
Ora, quando rilanci l’AppHost, Aspire scaricherà e avvierà automaticamente un container Redis, collegandolo al progetto Web.
Utilizzare la risorsa nel progetto Web
Nel progetto Web possiamo recuperare la connection string generata da Aspire:
var builder = WebApplication.CreateBuilder(args);
//Otteniamo la connessione a Redis
var redisConnection = builder.Configuration.GetConnectionString("redis");
builder.Services.AddStackExchangeRedisCache(options=>
{
options.Configuration = redisConnection;
});
var app = builder.Build();
app.MapGet("/ping", async (IDistributedCache cache) =>
{
var time = DateTime.UtcNow.ToString();
await cache.SetStringAsync("lastPing", time);
return $"Ping salvato in Redis alle {time}";
});
app.Run();
Se ora chiami /ping, il valore verrà salvato su Redis, senza che tu abbia dovuto configurare manualmente nulla.
Cosa fa Aspire dietro le quinte
In questo esempio abbiamo visto solo poche righe di codice, ma Aspire sta facendo tantissimo per noi:
In un setup tradizionale avresti dovuto creare un file docker-compose.yml, configurare le variabili d’ambiente, scrivere la connection string e mantenere tutto coerente tra ambienti diversi. Con Aspire, invece, tutto avviene automaticamente.
Conclusioni
Con pochi comandi e qualche riga di codice, abbiamo creato la nostra prima applicazione con .NET Aspire. Abbiamo visto come l’AppHost funga da orchestratore, come le risorse vengano dichiarate in modo dichiarativo e come i progetti possano collegarsi a esse senza configurazioni manuali.
Questo approccio elimina gran parte della complessità di setup che normalmente frena i team nello sviluppo di applicazioni distribuite.
Nel prossimo articolo approfondiremo l’architettura di .NET Aspire, per capire meglio come sono strutturati AppHost, progetti e risorse, e come tutto questo si integra in un’unica applicazione coerente.
Happy coding, Ivano.
Spoiler alert : Articolo scrito con il supporto dell'intelligenza artificiale