NexumNovus.AppSettings.MsSql 0.1.4

This package has a SemVer 2.0.0 package version: 0.1.4+build.47.
dotnet add package NexumNovus.AppSettings.MsSql --version 0.1.4
NuGet\Install-Package NexumNovus.AppSettings.MsSql -Version 0.1.4
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="NexumNovus.AppSettings.MsSql" Version="0.1.4" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add NexumNovus.AppSettings.MsSql --version 0.1.4
#r "nuget: NexumNovus.AppSettings.MsSql, 0.1.4"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install NexumNovus.AppSettings.MsSql as a Cake Addin
#addin nuget:?package=NexumNovus.AppSettings.MsSql&version=0.1.4

// Install NexumNovus.AppSettings.MsSql as a Cake Tool
#tool nuget:?package=NexumNovus.AppSettings.MsSql&version=0.1.4

Banner

NexumNovus.AppSettings.MsSql

NexumNovus.AppSettings.MsSql NuGet Package NexumNovus.AppSettings.MsSql NuGet Package Downloads GitHub Actions Status

GitHub Actions Build History

This package enables you to load and persist settings into MsSql database, and encrypt/decrypt settings marked with SecretSetting attribute.

About

MsSql configuration provider implementation for Microsoft.Extensions.Configuration. This package enables you to

  • read application settings from MsSql database.
  • update application settings and save changes to MsSql database.
  • cryptographically protect selected application settings

Use MsSqlHostBuilderExtensions.AddMsSqlConfig extension method on IHostBuilder to add the MsSql configuration provider to the configuration builder and register MsSqlSettingsRepository with service collection.

Use ISettingsRepository.UpdateSettingsAsync to update MsSql settings.

Mark properties with SecretSetting attribute to cryptographically protect them.

Example

using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options;
using NexumNovus.AppSettings.Common;
using NexumNovus.AppSettings.Common.Secure;
using NexumNovus.AppSettings.MsSql;

var builder = WebApplication.CreateBuilder(args);

// Load settings from MsSql database and register settings repository with service collection
builder.Host.AddMsSqlConfig("Data Source=.;Initial Catalog=NexumNovus;Integrated Security=true;");

// Use of options pattern to register configuration elements is optional.
builder.Services.AddOptions<EmailSettings>().BindConfiguration(EmailSettings.ConfigElement);

var app = builder.Build();

// Api's to get and update EmailSettings
app.MapGet("/emailSettings", (IOptionsMonitor<EmailSettings> emailSettings) => emailSettings.CurrentValue);
app.MapPost("/emailSettings", async (EmailSettings emailSettings, ISettingsRepository settingsRepo)
  => await settingsRepo.UpdateSettingsAsync(EmailSettings.ConfigElement, emailSettings)
);

// Api's to get and update a setting
app.MapGet("/settings", (string section, IConfiguration settings) => settings.GetSection(section));
app.MapPost("/settings", async (string section, string value, ISettingsRepository settingsRepo)
  => await settingsRepo.UpdateSettingsAsync(section, value)
);

app.Run();

public record EmailSettings
{
  public static string ConfigElement = "Email";
  public string Host { get; set; }
  public string Username { get; set; }
  [SecretSetting]
  public string Password { get; set; } //this setting will be cryptographically protected
} 

If a setting is not found in the database, then it's created.

Note that password is marked with [SecretSetting] and it will be protected. After update MsSql database will have a table __AppSettings with data:

Key Value
Email:Host "example.com"
Email:Username "my_username"
Email:Password "CfDJ8IBGRtcA2S1Ji7VPVwaKmLYnTN6skE_2RQqvNZ8_CN5y3Xvk3LkFC6GXCe8EY7AicxH5...."

Default implementation for ISecretProtector uses Microsoft.AspNetCore.DataProtection. You can also provide your own implementation.

By default settings are reloaded if updated using ISettingsRepository. If you need to reload them on external database changes set CheckForChangesPeriod to a timespan value larger that zero.

builder.Host.AddMsSqlConfig(x =>
{
  x.ConnectionString = "Data Source=.;Initial Catalog=NexumNovus;Integrated Security=true;",
  x.TableName = "MyCustomNameForAppSettingsTable",
  x.CheckForChangesPeriod = TimeSpan.FromSeconds(60),
  x.Protector = <your implementation of ISecretProtector>
});
Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
0.1.4 89 1/14/2024
0.1.2 69 7/4/2023
0.1.1 66 5/11/2023
0.1.0 69 5/10/2023