Configuratie in ASP.NET Core 1.0

Dit artikel gaat uit van een MVC6 solution gebaseerd op de ‘Standard Web Application’ template.

Een van de dingen waar ik tegenaan liep bij het opzetten van een van een MVC6 (ASP.NET 5) website, was het opslaan en benaderen van applicatie-instellingen.
Microsoft heeft het principe van instellingen oplaan in ‘Web.config’ in de root van een website overboord gegooid en in plaats daarvan besloten alles in een ‘appsettings.json’ bestand weg te stoppen. Dit bestand bevindt zich trouwens nog steeds in de root van de website.
Zoals de bestandsextensie wellicht doet vermoeden, heeft dit bestand een JSON opmaak. Standaard ziet ’t bestand er ongeveer zo uit:

{
    "Data": {
      "DefaultConnection": {
        "ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=aspnet5-MVC6-a8450846-4306-4af8-8577-0d0749193aaf;Trusted_Connection=True;MultipleActiveResultSets=true"
      }
    },
    "Logging": {
        "IncludeScopes": false,
        "LogLevel": {
            "Default": "Verbose",
            "System": "Information",
            "Microsoft": "Information"
        }
    }
}

We gaan hier nu onze eigen instellingen aan toevoegen, zodat het bestand er als volgt uit komt te zien:

{
  "Data": {
    "DefaultConnection": {
      "ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=aspnet5-MVC6-a8450846-4306-4af8-8577-0d0749193aaf;Trusted_Connection=True;MultipleActiveResultSets=true"
    }
  },
    "Logging": {
        "IncludeScopes": false,
        "LogLevel": {
            "Default": "Verbose",
            "System": "Information",
            "Microsoft": "Information"
        }
    },
    "AppSettings": {
        "Setting1": "dit is setting 1",
		"Setting2": "en dit is setting 2"
    }
}

Uiteraard is dit maar een voorbeeld en ben je verder vrij in naamgevingen.

Nu we dit gedaan hebben, moeten we voor bovenstaande een Class toevoegen:

public class AppSettings
{
	public string Setting1 { get; set; }
	public string Setting2 { get; set; }
}

Zoals je ziet komen de eigenschappen van deze Class overeen met toegevoegde instellingen in ‘appsettings.json’. Dit is heel belangrijk!

We zijn nu klaar om de instellingen aan de app toe te voegen door middel van Dependency Injection.

Open ‘Startup.cs’ in de root van de website en zoek de methode ‘ConfigureServices’.
Voeg de volgende 2 regels toe aan de methode:

services.AddOptions();
services.Configure<AppSettings>(Configuration.GetSection("AppSettings"));

Injecteer de instellingen vervolgens op de volgende manier in een Controller of Service:

using Microsoft.Extensions.OptionsModel;
[...]

public class HomeController : Controller
{
	// App Settings
	private string _setting1;
	private string _setting2;
	public HomeController(IOptions<AppSettings> appSettings)
	{
		_setting1 = appSettings.Value.Setting1;
		_setting2 = appSettings.Value.Setting2;
	}

	// Index page
	public IActionResult Index()
	{
		[...]
	}
	
	[...]
}

That’s it! Je kunt nu instellingen uit ‘appsettings.json’ gebruiken.