A configuration provider that uses SQL Server as its backing store.
The simplest way is to configure the SQL Server configuration from the existing configuration up to that point. Any configuration providers added after the call to AddSqlServer
will not have their data alter the way that the SQL Server configuration provider is set up.
await Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration(builder =>
{
builder.AddSqlServer(opts =>
{
// Will pull connection string, schema and table names from the
// configuration system up to this point.
opts.FromExistingConfiguration();
});
})
with the corresponding information in appsettings.json
, e.g.:
{
"ConnectionStrings": {
"ConfigDB": "*** Found in Secret Store ***"
},
"Stravaig": {
"AppConfiguration": {
"SchemaName": "Stravaig",
"TableName": "AppConfiguration",
"RefreshSeconds": 90,
"ConnectionStringName": "ConfigDB",
"CommandTimeout": 10
}
}
}
The default configuration section used is Stravaig.AppSettings
, however, this can be changed to what ever you prefer by passing in the path to the configuration section you prefer. e.g.
builder.AddSqlServer(opts =>
{
// Will pull connection string, schema and table names from the
// configuration system at the specified config section.
opts.FromExistingConfiguration("MyApp:SqlConfiguration");
});
The configuration provider is set up too early in the pipeline to be able to accept logging from the start. However you can attach a logger after it has been set up. The configuration provider will also hold on to any log messages and replay them once a logger it attached. It works like this:
- When calling
AddSqlServer
on the configuration builder. Make sure you callExpectLogger()
. This sets up the replay mechanism. - Then set up your loggers. The SqlServerConfigurationProvider logs from Debug up.
- By the time you get to configure services, you should be able to get a
ILoggerFactory
. There is an extension method,AttachLoggerToSqlServerProvider
onIConfigurationRoot
that will attach the logger.
await Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration(builder =>
{
builder.AddSqlServer(opts =>
{
opts.FromExistingConfiguration()
.ExpectLogger();
});
})
.ConfigureLogging(builder =>
{
builder.AddConsole();
builder.AddDebug();
builder.SetMinimumLevel(LogLevel.Debug);
})
.ConfigureServices((ctx, services) =>
{
// Attach the logger to the SQL Server Configuration Provider
IConfigurationRoot configRoot = (IConfigurationRoot) ctx.Configuration;
configRoot.AttachLoggerToSqlServerProvider(services.BuildServiceProvider().GetService<ILoggerFactory>());
})
CAUTION: If you call ExpectLogger
and never attach a logger, it will just hold on to the log messages for the lifetime of the application in memory.
- Ensure you have PowerShell 7.1.x or higher installed
- At a PowerShell prompt
- Navigate to the root of this repository
- Run
./Install-GitHooks.ps1