![]() |
VOOZH | about |
dotnet add package Raycynix.Extensions.Configuration --version 2.0.0
NuGet\Install-Package Raycynix.Extensions.Configuration -Version 2.0.0
<PackageReference Include="Raycynix.Extensions.Configuration" Version="2.0.0" />
<PackageVersion Include="Raycynix.Extensions.Configuration" Version="2.0.0" />Directory.Packages.props
<PackageReference Include="Raycynix.Extensions.Configuration" />Project file
paket add Raycynix.Extensions.Configuration --version 2.0.0
#r "nuget: Raycynix.Extensions.Configuration, 2.0.0"
#:package Raycynix.Extensions.Configuration@2.0.0
#addin nuget:?package=Raycynix.Extensions.Configuration&version=2.0.0Install as a Cake Addin
#tool nuget:?package=Raycynix.Extensions.Configuration&version=2.0.0Install as a Cake Tool
Raycynix.Extensions.Configuration contains the core typed-configuration registration helpers for Raycynix applications.
AddRaycynixEnvironment()AddRaycynixEnvironment(string)AddRaycynixConfigurationSources(...)UseRaycynixConfigurationSources(...)AddRaycynixFeatureFlags(...)AddRaycynixConfiguration<TOptions>(...)ConfigureRaycynixConfigurationDiagnostics(...)AddRaycynixConfigurationRedactor<TRedactor>()AddRaycynixConfigurationRedactor(...)AddRaycynixConfigurationAccessor<TOptions>()AddRaycynixConfigurationValidator<TOptions, TValidator>()AddRaycynixConfigurationValidator<TOptions>(...)AddRaycynixConfigurationReloadPolicy<TOptions, TReloadPolicy>()AddRaycynixConfigurationReloadPolicy<TOptions>(...)AddRaycynixConfigurationChangeHandler<TOptions, THandler>()AddRaycynixConfigurationChangeHandler<TOptions>(...)IHostEnvironmentIFeatureFlagAccessoroptionsNamerequireSectionIConfigurationDefaults<TOptions>IValidateOptions<TOptions> integrationIConfigurationAccessor<TOptions>IConfigurationReloadPolicy<TOptions>IOptionsMonitor<TOptions>IConfigurationDiagnosticsIConfigurationRedactorIConfigurationbuilder.Configuration.UseRaycynixConfigurationSources(options =>
{
options.BaseFileName = "appsettings";
options.EnvironmentName = builder.Environment.EnvironmentName;
options.IncludeUserSecrets = builder.Environment.IsDevelopment();
});
builder.Services.AddRaycynixEnvironment();
builder.Services.AddRaycynixFeatureFlags(builder.Configuration);
builder.Services.AddRaycynixConfiguration<MyOptions>(
builder.Configuration,
requireSection: true,
configureDefaults: options =>
{
options.TimeoutSeconds = 30;
});
builder.Services.AddRaycynixConfigurationValidator<MyOptions, MyOptionsValidator>();
builder.Services.AddRaycynixConfigurationReloadPolicy<MyOptions>(context =>
{
return ConfigurationReloadResult.Reject("MyOptions cannot be changed at runtime.");
});
builder.Services.AddRaycynixConfigurationChangeHandler<MyOptions>(
static (context, cancellationToken) =>
{
Console.WriteLine($"Configuration changed: {context.ChangedAtUtc:O}");
return ValueTask.CompletedTask;
});
builder.Services.ConfigureRaycynixConfigurationDiagnostics(options =>
{
options.MaxReloadHistoryPerOptions = 10;
});
Typed options bind from a section named after the options type by default:
{
"MyOptions": {
"Value": "from-config",
"TimeoutSeconds": 30
},
"FeatureFlags": {
"Flags": {
"NewDashboard": true,
"UseFastCache": false
}
}
}
You can override the section name explicitly when needed:
builder.Services.AddRaycynixConfiguration<MyOptions>(
builder.Configuration,
sectionName: "MyFeatureArea:MyOptions");
Named options can be registered by passing optionsName:
builder.Services.AddRaycynixConfiguration<MyOptions>(
builder.Configuration,
sectionName: "Tenants:Primary",
optionsName: "Primary");
IConfigurationAccessor<TOptions>.Get("Primary") returns the current approved snapshot for that named options instance.
Use runtime change handling in this order:
AddRaycynixConfiguration<TOptions>(...)Example:
builder.Services.AddRaycynixConfiguration<CacheOptions>(builder.Configuration);
builder.Services.AddRaycynixConfigurationReloadPolicy<CacheOptions>(context =>
{
if (context.Previous.ConnectionString != context.Current.ConnectionString)
{
return ConfigurationReloadResult.Reject(
"CacheOptions.ConnectionString cannot be changed at runtime.");
}
return ConfigurationReloadResult.Apply();
});
builder.Services.AddRaycynixConfigurationChangeHandler<CacheOptions>(
static (context, cancellationToken) =>
{
Console.WriteLine(
$"Cache options reloaded at {context.ChangedAtUtc:O}. New TTL: {context.Current.DefaultTtlSeconds}");
return ValueTask.CompletedTask;
});
In this example:
By default, the package binds the section named after the options type, for example MyOptions.
You can override the section name explicitly when needed.
Registered validators run through the standard Options validation pipeline and are enforced on startup through ValidateOnStart().
AddRaycynixConfiguration<TOptions>(...) also registers IConfigurationAccessor<TOptions> so application services can read the current typed configuration without directly depending on IOptionsMonitor<TOptions>.
Example:
public class MyService(IConfigurationAccessor<MyOptions> configurationAccessor)
{
public void Execute()
{
var options = configurationAccessor.Current;
Console.WriteLine(options.TimeoutSeconds);
}
}
Reload policies are evaluated before change handlers are notified. A policy can apply, reject, ignore, or mark a runtime change as requiring restart.
When a runtime change is rejected, IConfigurationAccessor<TOptions> continues to expose the last approved configuration snapshot.
Configuration change handlers are triggered through the standard IOptionsMonitor<TOptions> pipeline when reloadable sources produce updated option values.
You can also declare simple runtime reload rules directly on properties:
public class CacheOptions
{
[ConfigurationReloadBehavior(ConfigurationReloadBehavior.Reject)]
public string ConnectionString { get; set; } = string.Empty;
public int DefaultTtlSeconds { get; set; }
}
When a property marked with Reject changes, the runtime update is rejected automatically before handlers are called.
IConfigurationDiagnostics exposes registered options, retained reload decisions, and redacted snapshots:
var diagnostics = app.Services.GetRequiredService<IConfigurationDiagnostics>();
var registrations = diagnostics.GetRegistrations();
var reloads = diagnostics.GetReloads();
var snapshot = diagnostics.GetRedactedSnapshot<MyOptions>();
Diagnostics behavior can be configured globally:
builder.Services.ConfigureRaycynixConfigurationDiagnostics(options =>
{
options.EnableSnapshots = true;
options.MaxReloadHistoryPerOptions = 10;
});
The default redactor hides common sensitive keys such as passwords, tokens, API keys, private keys, authorization values, and connection strings. Applications can replace it with a custom implementation:
builder.Services.AddRaycynixConfigurationRedactor((key, value) =>
{
return key.Contains("license", StringComparison.OrdinalIgnoreCase)
? "***"
: value;
});
Use the standard FeatureFlags section to store boolean feature toggles:
{
"FeatureFlags": {
"Flags": {
"NewDashboard": true,
"UseFastCache": false
}
}
}
Register the feature flags accessor:
builder.Services.AddRaycynixFeatureFlags(builder.Configuration);
Use it in application code:
public class DashboardService(IFeatureFlagAccessor featureFlags)
{
public bool UseNewDashboard()
{
return featureFlags.IsEnabled("NewDashboard");
}
}
Feature flags use the same configuration pipeline as the rest of the package, so they can also participate in reloadable sources.
The standard source order is:
appsettings.jsonappsettings.{Environment}.jsonThe standard environment names are:
DevelopmentTestingStagingProduction| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 net10.0 is compatible. net10.0-android net10.0-android was computed. net10.0-browser net10.0-browser was computed. net10.0-ios net10.0-ios was computed. net10.0-maccatalyst net10.0-maccatalyst was computed. net10.0-macos net10.0-macos was computed. net10.0-tvos net10.0-tvos was computed. net10.0-windows net10.0-windows was computed. |
Showing the top 5 NuGet packages that depend on Raycynix.Extensions.Configuration:
| Package | Downloads |
|---|---|
|
Raycynix.Extensions.Logging
Structured logging registration, Serilog-based host integration, typed logger adapters, and configurable console logging for Raycynix applications. |
|
|
Raycynix.Extensions.Database
Core Raycynix EF Core database infrastructure with shared DbContext registration, custom context support, model assembly discovery, provider validation, initialization, and model-cache integration. |
|
|
Raycynix.Extensions.Security
Core security services, typed security configuration, shared identity context handling, and application-level authorization composition for Raycynix applications. |
|
|
Raycynix.Extensions.Database.PostgreSql
PostgreSQL provider integration for Raycynix.Extensions.Database with AddPostgreSql registration, provider-specific validation, Npgsql connection-string composition, and EF Core UseNpgsql configuration. |
|
|
Raycynix.Extensions.Messaging
Transport-agnostic messaging registration, dispatch, direct requests, observability, scoped envelope factories, and outbox/inbox reliability foundations for Raycynix applications. |
This package is not used by any popular GitHub repositories.
v2.0.0 adds required configuration sections, named options, approved runtime snapshots, expanded reload behavior, diagnostics with redacted snapshots, configurable reload history, and custom redactor registration.