Utilizzare Azure App Configuration con ASP.NET Core

di Cristian Civera, in App Configuration,

Nello script #144 abbiamo visto come usare il portale per usufruire di un nuovo servizio Azure dedicato alla centralizzazione delle configurazioni: App Configuration. Permette di memorizzare coppie di chiave/valore ed eventualmente di declinarle su più label per poter differenziare ulteriormente la chiavi.

Per usufruire di queste chiavi disponiamo nel mondo .NET Core di un pacchetto NuGet di nome Microsoft.Extensions.Configuration.AzureAppConfiguration e attualmente in preview. Esso ci mette a disposizione un nuovo provider dedicato alla configurazione, con l'eccezione che invece di caricare da file JSON o da variabili d'ambiente, accede ad un servizio remoto. Da esso vengono lette le chiavi e messe in unione a tutte le altre caricate con altri provider, perciò possiamo usare le configurazioni in unione ad altri servizi, con l'ausilio delle opzioni e così via come siamo già abituati a fare.

Attraverso un apposito extension method possiamo impostare la stringa di connessione da utilizzare direttamente nel Program.cs della nostra applicazione ASP.NET Core. La stringa la troviamo direttamente sul portale, nella sezione Access Keys ed è sufficiente per caricare le chiavi.

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration((hostingContext, config) =>
        {
            IConfigurationRoot settings = config.Build();
            config.AddAzureAppConfiguration(o =>
            {
                o.ConnectionString = settings["ConnectionStrings:AppConfig"];
            });
        })
        .UseStartup<Startup>();

Supponiamo quindi di avere delle chiavi impostate, come nella figura seguente.

Questo significa che possiamo leggere una di quelle chiavi grazie ad un'istanza di IConfiguration e, grazie alla sintassi basata sui due punti, accedere alla sezione e alla relativa chiave, anche direttamente dalla view.

@inject IConfiguration Configuration

@Configuration.GetSection("Colors")["Foreground"]

In alternativa possiamo creare una classe di opzioni e ottenere la sua valorizzazione associandola alla sezione.

public class ColorsOptions
{
    public string Foreground { get; set; }

    public string Background { get; set; }
}

Nello startup impostiamo la sezione da usare per valorizzare la proprietà in automatico.

services.Configure<ColorsOptions>(Configuration.GetSection("Colors"));

Sfruttando sempre la dependency injection possiamo ottenere un'istanza delle opzioni pronte all'uso e anche in questo caso leggerle dalla view.

@inject IOptionsSnapshot<ColorsOptions> ColorOptions

<p>Color: @ColorOptions.Value.Foreground</p>
<p>Background: @ColorOptions.Value.Background</p>

Quello che otteniamo è la visualizzazione però delle chiavi aventi la label vuota. Per poter leggere anche la label possiamo, sempre in fase di configurazione, indicare uno o più label da leggere ed eventualmente con i rispettivi filtri. Con un po' di astuzia possiamo ottenere quindi comportamenti interessanti.

config.AddAzureAppConfiguration(o =>
{
    o.ConnectionString = settings["ConnectionStrings:AppConfig"];

    // Leggo prima le chiavi che iniziano con Colors, senza label
    o.Use("Colors:*", LabelFilter.Null);
    // Sovrascrivo con qualsiasi chiave della label customer1
    o.Use(KeyFilter.Any, "customer1");
});

In questo caso, per esempio, leggiamo prima tutte le chiavi che iniziano con Colors: e successivamente tutte quelle che appartengono a customer1. L'ordine di definizione è quindi importante per determinare il rispettivo caricamento. Filtri e label sono facoltativi: il primo può contenere l'asterisco per effettuare delle contains, startWith e endWith. Il secondo invece non supporta questi operatori. Sulla base della figura vista in precedenza, sulla view compariranno i colori White per il Background (label base) e Green per il Foreground (label customer1).

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