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" ); ...
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" } } }
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; } }
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; } }
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<UserBackend>( ); //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>( userBackend ); }