Raycynix.Extensions.Configuration
0.2.1
See the version list below for details.
dotnet add package Raycynix.Extensions.Configuration --version 0.2.1
NuGet\Install-Package Raycynix.Extensions.Configuration -Version 0.2.1
<PackageReference Include="Raycynix.Extensions.Configuration" Version="0.2.1" />
<PackageVersion Include="Raycynix.Extensions.Configuration" Version="0.2.1" />
<PackageReference Include="Raycynix.Extensions.Configuration" />
paket add Raycynix.Extensions.Configuration --version 0.2.1
#r "nuget: Raycynix.Extensions.Configuration, 0.2.1"
#:package Raycynix.Extensions.Configuration@0.2.1
#addin nuget:?package=Raycynix.Extensions.Configuration&version=0.2.1
#tool nuget:?package=Raycynix.Extensions.Configuration&version=0.2.1
Raycynix.Extensions.Configuration
Raycynix.Extensions.Configuration contains the core typed-configuration registration helpers for Raycynix applications.
What it contains
AddRaycynixEnvironment()AddRaycynixEnvironment(string)AddRaycynixConfigurationSources(...)UseRaycynixConfigurationSources(...)AddRaycynixFeatureFlags(...)AddRaycynixConfiguration<TOptions>(...)AddRaycynixConfigurationAccessor<TOptions>()AddRaycynixConfigurationValidator<TOptions, TValidator>()AddRaycynixConfigurationValidator<TOptions>(...)AddRaycynixConfigurationReloadPolicy<TOptions, TReloadPolicy>()AddRaycynixConfigurationReloadPolicy<TOptions>(...)AddRaycynixConfigurationChangeHandler<TOptions, THandler>()AddRaycynixConfigurationChangeHandler<TOptions>(...)- typed configuration binding based on the standard Options pipeline
- standard environment abstraction based on
IHostEnvironment - standard configuration source ordering
- feature flag access through
IFeatureFlagAccessor - support for default values through delegates and
IConfigurationDefaults<TOptions> - startup validation through standard
IValidateOptions<TOptions>integration - unified typed access through
IConfigurationAccessor<TOptions> - reload governance through
IConfigurationReloadPolicy<TOptions> - typed change notifications through
IOptionsMonitor<TOptions>
What it does not contain
- custom replacement for
IConfiguration - custom configuration providers
- feature flag infrastructure
Usage
builder.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,
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;
});
Applying Runtime Reload Rules
Use runtime change handling in this order:
- register the typed options model with
AddRaycynixConfiguration<TOptions>(...) - register a validator if the options must be valid on startup
- register a reload policy if runtime updates must be limited
- register one or more change handlers for the updates that are actually allowed
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:
- the options are still reloadable
- connection string changes are rejected
- allowed changes continue to flow through the registered handlers
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 or reject a runtime change.
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.
Feature Flags
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}.json- user secrets when enabled
- environment variables
- command-line arguments
The standard environment names are:
DevelopmentTestingStagingProduction
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Microsoft.Extensions.Configuration (>= 10.0.5)
- Microsoft.Extensions.Configuration.Abstractions (>= 10.0.5)
- Microsoft.Extensions.Configuration.Binder (>= 10.0.5)
- Microsoft.Extensions.Configuration.CommandLine (>= 10.0.5)
- Microsoft.Extensions.Configuration.EnvironmentVariables (>= 10.0.5)
- Microsoft.Extensions.Configuration.Json (>= 10.0.5)
- Microsoft.Extensions.Configuration.UserSecrets (>= 10.0.5)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.5)
- Microsoft.Extensions.Hosting.Abstractions (>= 10.0.5)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.5)
- Microsoft.Extensions.Options (>= 10.0.5)
- Microsoft.Extensions.Options.ConfigurationExtensions (>= 10.0.5)
- Raycynix.Extensions.Configuration.Abstractions (>= 0.1.5)
NuGet packages (6)
Showing the top 5 NuGet packages that depend on Raycynix.Extensions.Configuration:
| Package | Downloads |
|---|---|
|
Raycynix.Extensions.Messaging
Transport-agnostic messaging registration, dispatch, direct requests, observability, scoped envelope factories, and outbox/inbox reliability foundations for Raycynix applications. |
|
|
Raycynix.Extensions.Logging
Structured logging registration, Serilog-based host integration, typed logger adapters, and configurable console or Elasticsearch logging for Raycynix applications. |
|
|
Raycynix.Extensions.Database
Core shared database registration, DatabaseContext infrastructure, model assembly discovery, explicit provider-package composition, and provider-agnostic EF Core model caching for Raycynix applications. |
|
|
Raycynix.Extensions.Configuration.AspNetCore
ASP.NET Core integrations for Raycynix configuration source setup, application environment registration, and feature gating. |
|
|
Raycynix.Extensions.Metrics
Core metrics registration, Prometheus-backed metric services, typed metrics configuration, and application-level instrumentation composition for Raycynix applications. |
GitHub repositories
This package is not used by any popular GitHub repositories.