====== Eigene Konfigurationsklasse für die appsettings.json ====== Erweitert man die **//appsettings.json//** , so möchte man natürlich bequem auf die Einstellungen zugreifen wie bei der Default-Konfiguration: public IConfiguration Configuration { get; } .... ... Configuration.GetConnectionString( "DatenbankKennung" ); ... ===== appsetting.json ===== Die Konfigurationsdatei selbst: { "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "ConnectionStrings": { "InternalDatabase" : "Host=localhost;Database=DATABASENAME;username=DATABASEUSER;password=PASSWORD!!;" }, "AllowedHosts": "*", "UserBackend":{ "Openssl" : "/usr/bin/openssl", "CaPath" : "/var/deincaname/", "InternalBackend" : false, "Ads": { "Server" : "localhost", "BaseDn" : "local", "AllowUserCert" : "SomeAdGroup", "AllowEmailCert" : "AnotherAdGroup", "AllowCryptCert" : "AntherAnotherAdGroup:D" }, "___comment1" : "dieser Parameter wird nicht mit aufgenommen ;)", "___comment2" : "2. Object innerhalb der UserBackend-Struktur....", "Database":{ "Server" : "localhost", "DbName" : "dbname", "User" : "dbuser", "Password" : "dbpass" } } } ===== UserBackend Klasse ===== public class UserBackend { public string Openssl { get; set; } public string CaPath { get; set; } public Ads Ads { get; set; } public Database Database { get; set; } public bool InternalBackend { get; set; } public bool CheckConfiguration( ) { return false; } } ==== Ads und Database - Klassen ==== public abstract class AllowCertQuery { public string AllowUserCert { get; set; } public string AllowEmailCert { get; set; } public string AllowCryptCert { get; set; } } public class Ads : AllowCertQuery { public string Server { get; set; } public string BaseDn { get; set; } } public class Database : AllowCertQuery { public string Server { get; set; } public string DbName { get; set; } public string User { get; set; } public string Password { get; set; } } ===== Zusammenbau der Konfiguration in Startup.cs ===== So: Noch schnell die Konfiguration lesen und bereitstellen ;) public UserBackend userBackend { get; private set; } public void ConfigureServices( IServiceCollection services ) { //appsetting.json einlesen und parsen lassen :) var config = new ConfigurationBuilder( ) .SetBasePath( AppDomain.CurrentDomain.BaseDirectory ) .AddJsonFile( "appsettings.json" ).Build( ); //Die Sektion UserBackend rausfummeln... var section = config.GetSection( nameof( SuperCA.Configuration.UserBackend ) ); //Die Sektion mit json-parser in ein Objekt überführen ;) UserBackend userBackend = section.Get( ); //some stuff zBsp. die Konfiguration prüfen.. kommt natürlich immer FALSE if( !userBackend.CheckConfiguration( ) ) { _logger.LogError("UserBackend-Service configuration has some errors"); } //auch sehr angenehm ist, dass man gleich die neue Konfiguration für DI (Dependency Injection) bekannt macht services.AddSingleton( userBackend ); }