Skip to main content
Package: WestyxNexus.Extensions.Configuration The SDK ships an IConfigurationSource / IConfigurationProvider implementation. With a single AddWestyx(...) call, all Nexus config values are exposed through IConfiguration — bind them to IOptions<T> classes, read them via configuration["key"], and receive live IOptionsMonitor<T> updates when a value changes in the console.
Since v0.11.0 this lives in its own package. Microsoft.Extensions.Configuration left the core package, so run dotnet add package WestyxNexus.Extensions.Configuration. The namespace is unchanged (Westyx.Nexus), so no code edit is needed.
Binding was broken before v0.11.0 and now works. Dotted Nexus keys were inserted verbatim, and IConfiguration’s section separator is a colon — so GetSection("database") returned an empty section and Configure<T>() bound nothing. Keys are now emitted in both forms, and nested JSON is flattened. Any workaround you built is no longer needed, but will keep working.
Secrets are not included — only configs. See Secrets binding for the strongly-typed secret path, and Design decisions for why secrets stay out of IConfiguration by default.

Basic setup

AddWestyx performs a blocking initial sync inside Build() — the same pattern used by Azure App Configuration and other standard providers. All Nexus config values are available from the moment builder.Build() returns. The SSE live-update stream starts automatically (enableStream: true is the default). Turn it off if you prefer TTL-only polling:

Binding to IOptions<T>

After calling AddWestyx, bind Nexus configs to a strongly-typed class the same way you would bind any other configuration section:
Inject IOptions<DatabaseSettings> where you need it:

Live reload with IOptionsMonitor<T>

When the SSE stream is running, the configuration provider calls IConfiguration.Reload() automatically after every sync that returns new data. This means IOptionsMonitor<T> receives change notifications within milliseconds of a value being updated in the Nexus console — without a restart.
Live reload requires ConnectStream() to be active. AddWestyx(config) starts the stream automatically. If you use the pre-created client overload, call client.ConnectStream() yourself before registering the source.

Pre-created client (WIF, advanced lifetime)

If you need WIF authentication or want to manage the client lifetime yourself, pass an existing NexusClient to the overload:
With this overload, you are responsible for starting the stream and disposing the client. The builder.Services.AddSingleton(client) registration ensures the host shuts the client down cleanly.

Reading configs directly from IConfiguration

You can also read Nexus config values directly without binding to a class:

Key shapes

A Nexus key database.host is reachable two ways, and both are supported deliberately: Before v0.11.0 only the middle row worked, which is why GetSection("database") came back empty.

Nested objects and arrays

A JSON object or array config value is flattened the way the built-in JSON provider does it, so it binds to a POCO or a collection:
Before v0.11.0 these were stored as one opaque raw-JSON string with no child keys, so they could not bind to anything.

Value type serialization

Nexus config values are JSON. The provider serializes them to strings for IConfiguration: Standard binding (IOptions<T>) handles all of these natively. Objects and arrays no longer need manual parsing — that was a limitation of the pre-v0.11.0 raw-JSON representation.

Combining with other configuration sources

AddWestyx stacks with the other sources in the builder. The last source wins for duplicate keys — so to let local environment variables override Nexus values (useful during development), add Nexus before environment variables:
Or add it after to give Nexus higher priority than appsettings.json but lower than environment variables: