Le Azure Function sono state introdotte nella piattaforma cloud per permette la definizione di funzioni da eseguire ignorando completamente l'ambiente in cui vengono eseguite. L'unica logica di riferimento è la funzione, la quale può essere attivata tramite trigger. Per renderne immediato l'utilizzo, fin dall'inizio la definizione di funzioni era affidata a metodi statici, proprio per evidenziare l'atomicità del metodo stesso.
Dalla versione 2.0.12265 del runtime delle Azure Functions, è stato inserito l'utilizzo di ASP.NET Core 2.2 come runtime, ma anche il supporto all'invocazione di metodi di istanza e non solo statici. Questo vuol dire che ci è sufficiente togliere la parola chiave static e ottenere la creazione di una nuova istanza della classe tutte le volte che la funzione invocata. Questo risulta utile quando abbiamo bisogno di memorizzare dati a livello di classe per tutta la durata dell'esecuzione.
Per esempio, possiamo usare il motore di dependency injection per risolvere una dipendenza da usare all'interno della singola richiesta.
public class MyFunction { private static readonly ServiceProvider Provider; static MyFunction() { // Definizione dei servizi IServiceCollection services = new ServiceCollection(); services.AddTransient<TestService>(); // Creazione provider Provider = services.BuildServiceProvider(); } private readonly TestService _service; public MyFunction() { // Risoluzione della dipendenza per questa istanza _test = Provider.GetRequiredService<TestService>(); } [FunctionName("MyFunction")] public async Task<IActionResult> Run( [HttpTrigger(AuthorizationLevel.Function, "get")] HttpRequest req, ILogger log) { // Utilizzo della dipendenza string message = await _test.GetMessageAsync(); return new OkObjectResult(message); } } }
Nello snippet precedente possiamo notare l'utilizzo di una normale classe. Nel costruttore statico definiamo una sola volta le dipendenze ed istanziamo il provider. Successivamente risolviamo la dipendenza nel costruttore di istanza della classe, per poi utilizzarla dove ci serve.
Il passaggio all'uso di istanza si dimostra utile, quindi, soprattutto quando necessitiamo di campi privati che vengono persi terminata la richiesta.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Filtrare le chiamate HTTP ad un App Service in base al servizio Azure
devConf 2022
Eliminare spazio inutilizzato in un Azure Container Registry
Le novità di .NET 6 e C# 10
Integrare e trasformare dati con Azure Data Factory
Performance in .NET 6
Scenari di test avanzati con ASP.NET Core
Le novità di Angular 13 e del suo ecosistema
Bypassare l'esecuzione di una GitHub Action su branch protetti
Creare velocemente microservice grazie a minimal API di ASP.NET Core 6
sono finalmente online le registrazioni del #serverless day: https://aspit.co/ServerlessDay#azure #azurefunctions #aws #awslambdas #keda #devops
Continuous Deployment tramite GitOps
I più letti di oggi
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- YARP: un reverse proxy in ASP.NET Core
- Whidbey, Yukon e Longhorn su MSDN