Sebbene ancora in preview, come abbiamo visto nello script #98, possiamo utilizzare .NET Core con il nuovo runtime delle Azure Function. Viene naturale quindi poter usare alcune delle caratteristiche con esso introdotte e disponibili in gran parte come package .NET Standard, ma che normalmente siamo abituati ad usare con il runtime di .NET Core, più snello e leggero.
Tra le novità principali è sicuramente importante l'utilizzo in maniera massiccia di un motore di Inversion of Control (IoC) e della dependency injection. Con poche righe possiamo sfruttare le stesse funzionalità anche all'interno di una Azure Function, direttamente scrivendo codice, senza compilarlo.
Il primo passo consiste nel creare un file csx, di facile riutilizzo, nel quale andiamo istanziare il ServiceCollection, cioè dove andare a registrare i servizi, e sul quale andiamo a chiamare BuildServiceProvider, per istanziare il provider.
#r "Microsoft.Extensions.DependencyInjection" #r "Microsoft.Extensions.DependencyInjection.Abstractions" #r "Microsoft.Extensions.Options" using Microsoft.Extensions.DependencyInjection; public static class Host { public static IServiceProvider Create(Action<IServiceCollection> configure) { // Registrazione delle dipendenze globali var services = new ServiceCollection(); services.AddOptions(); // Registrazione delle dipendenze esterne configure(services); // Creazione del container return services.BuildServiceProvider(); } }
Il file appena creato, nell'esempio chiamato host.csx, rappresenta una configurazione minima nel quale abbiamo inserito per esempio il setup del sistema di opzioni, ma potremmo aggiungerci anche la configurazione o altri servizi. Per il resto deleghiamo ad una funzione esterna la registrazione dei servizi, proprio per renderlo riutilizzabile.
In una ipotetica function.csx, quindi, non ci resta che creare un'istanza dell'host andando a configurare i servizi di nostro interesse.
#r "Newtonsoft.Json" // Carico la classe esterna #load "host.csx" using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.DependencyInjection; static IServiceProvider ServiceProvider = Host.Create(s => { // Registrazioni per la funzione s.AddSingleton<MyRepository>(); }); public static IActionResult Run(HttpRequest req, TraceWriter log) { // Ottengo il servizio var repo = ServiceProvider.GetRequiredService<MyRepository>(); return new OkObjectResult("Hello from " + repo.Count); } private class MyRepository { public int Count => 10; }
Una volta fatto possiamo utilizzare l'istanza ServiceProvider per ottenere i servizi di nostro interesse che vivranno a seconda del lifetime dato. Da notare che istanze di tipo singleton vivranno per tutta la durata del processo, perciò è meglio preferire servizi di tipo transient o scoped. Dato che all'interno di un progetto possono risiedere tante funzioni, ognuna in modo indipendente registra e utilizza le proprie dipendenze.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Ricevere avvisi su metriche dei server Azure Arc
Sfruttare i tag nell'output cache di ASP.NET Core 7
Health monitoring con Azure Container App
Definire le impostazioni di cache a livello di controller in ASP.NET Core 7
Utilizzare parametri a livello di controller nel routing di ASP.NET Core
Intercettare gli eventi di creazione degli oggetti con Entity Framework 7
Leggere la configurazione da Azure KeyVault con logica di retry in ASP.NET Core
Elencare le container images installate in un cluster di Kubernetes
Monitorare metriche delle risorse Azure con Load Testing
Utilizzare l'attributo HTML inert per disabilitare gli eventi
YARP: un reverse proxy in ASP.NET Core
Le novità di Entity Framework (Core) 7
I più letti di oggi
- Rilasciata la versione 1.0 di ASP.NET MVC
- Abilitare HTTP/3 in ASP.NET Core 7.0
- Seconda preview per i Dynamic Data Control 4.0
- Ecco la roadmap di ASP.NET 5: il rilascio definitivo nel corso del primo trimestre 2016
- Rilasciato il Service Pack 3 di SQL Server 2005
- Rilasciata la versione 1.0 di ASP.NET Core
- Questionario sulla qualità di VS 2005
- Disponibile il SP1 di SQL Server 2008