Gå til indholdet

Konfigurationsfiler

Kommunikation med konfigurationsfiler sker på forskellig vis afhængig af runtime, og det kan ske både typevagt og typestærkt.

Typesvag binding til en .NET Core konfigurationsfil

Den typesvage binding til en json-fil i .NET Core kræver NuGet pakken

Microsoft.Extensions.Configuration.Json

Med udgangspunkt i følgende json-fil kaldet appsettings.json (husk - “Copy to Output Directory” = “Copy always”)

{
  "ApplicationName": "My sample application",

  "SectionA": {
    "ModuleName": "My sample module"
  }
}

kan følgende kode bruges:

// Kræver NuGet: Microsoft.Extensions.Configuration.Json
// samt evt Microsoft.Extensions.Configuration.Binder (.NET 6+)
using Microsoft.Extensions.Configuration;
using System;
using System.IO;

namespace Configuration.Core
{
    class Program
    {
        static void Main(string[] args)
        {

            var c1 = ConfigSetupWeak();
            Console.WriteLine(c1["ApplicationName"]);
            Console.WriteLine(c1.GetSection("SectionA")["ModuleName"]);

        }

        static IConfigurationRoot ConfigSetupWeak() {
            var builder = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
            IConfigurationRoot configuration = builder.Build();
            return configuration;
        }
    }
}

Typestærk binding til en .NET Core konfigurationsfil

Den typestærke binding kræver klasser der mapper konfigurationsfilen (typisk json), samt følgende pakker:

Microsoft.Extensions.Configuration.Json
Microsoft.Extensions.Configuration.Binder

Med udgangspunkt i følgende json-fil kaldet appsettings.json (husk - “Copy to Output Directory” = “Copy always”)

{
    "A": "abc",
    "B": 1,
    "C": true
}

kan følgende kode bruges:

using System;
using System.IO;
using Microsoft.Extensions.Configuration;

namespace ConsoleOpgave_Configuration
{
    class Program
    {
        static void Main(string[] args)
        {
            var configuration = GetConfiguration();
            Console.WriteLine(configuration.A);
            Console.WriteLine(configuration.B);
            Console.WriteLine(configuration.C);
        }

        static Configuration GetConfiguration() {
            var builder = new ConfigurationBuilder()
                    .SetBasePath(Directory.GetCurrentDirectory())
                    .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
            IConfigurationRoot configuration = builder.Build();
            var c = new Configuration();            
            configuration.Bind(c);
            return c;
        }
    }

    class Configuration {
        public string A { get; set; }
        public int B { get; set; }
        public bool C { get; set; }
    }
}

.NET Framework

Det nemmeste i .NET Framework er at benytte app.config og tilføje følgende:

<appSettings>
  <add key="MyValue1" value="123" />
  <add key="MyValue2" value="abc" />
</appSettings>

til configuration-noden.

Herefter kan noderne aflæses med

string v1 = System.Configuration.ConfigurationManager.AppSettings["MyValue1"];
string v2 = System.Configuration.ConfigurationManager.AppSettings["MyValue2"];

Men det kræver, at projektet har en reference (ikke NuGet) til

System.Configuration