All'interno del precedente script abbiamo parlato di .NET Aspire e della sua capacità di orchestrare le risorse necessarie per lo sviluppo di un'applicazione in locale.
Al momento abbiamo un'applicazione backend e una frontend che dialogano tra loro, il cui ciclo di vita è monitorato da .NET Aspire. È un'ottima casistica per prendere familiarità con l'interfaccia base, ma sappiamo bene che è anche molto lontana dalla realtà dei fatti: un backend senza un database non può funzionare, se le risorse sono richieste molteplici volte, un sistema di cache è indispensabile.
Iniziamo proprio da questo ultimo punto, che essendo il più standardizzato risulta di facile implementazione.
All'interno dell'applicazione host è necessario installare il pacchetto Aspire.Hosting.Redis e spostarsi successivamente nel program.cs per definire la risorsa e fornirla al progetto backend
var builder = DistributedApplication.CreateBuilder(args);
var cache = builder.AddRedis("redis-abc");
builder.AddProject<MiaSoluzione.ProgettoBackend>()
.WithReference(cache);
Al momento abbiamo utilizzato un'istanza di Redis, a cui il progetto potrà appellarsi usando la stringa di connessione "redis-abc". La cache sarà creata all'interno di un container e gestita interamente da .NET Aspire.
Se volessimo applicare delle personalizzazioni potremmo aggiungerle in cascata alla definizione della stessa
var cache = builder.AddRedis("redis-abc")
// Insight
.WithRedisInsight()
// Persistenza al di fuori del container
.WithDataVolume(isReadOnly: false);
// Persistenza con binding
var cache = builder.AddRedis("redis-abc")
.WithDataBindMount(
source: @"C:\mio-path\Data",
isReadOnly: false);
Per poterne usufruire nel backend non occorrerà altro che installare il pacchetto Aspire.StackExchange.Redis.DistributedCaching ed iniettare il servizio nel program.cs
builder.AddRedisDistributedCache(connectionName: "redis-abc");
A questo punto potremmo utilizzarla come istanza di IDistributedCache
public class MyController{
public MyController(IDistributedCache cache)
{
}
}Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Referenziare un package NuGet in una file based app .NET
Gestire progetti NPM in .NET Aspire
Utilizzo di CSS Scroll Snap per realizzare un carousel
Cache temporanea in Javascript con oggetti
Supportare la crittografia di ASP.NET Core con Azure Container App
Effettuare la ricerca di testo nascosto in una pagina web con Javascript
Evitare la compressione degli artefatti in un workflow di GitHub
Blazor e Static Web Assets in .NET 10
Usare i generics di C# con la clausola nameof in modo semplificato
Esporre tool MCP con Azure Functions
Creare espressioni riutilizzabili nelle query LINQ per Entity Framework


