IConfigureOptions<T> lets a separate configuration class customize an options object. Its Configure method receives the options instance and can populate it using services resolved through dependency injection. section 31.2
Use the interface when options configuration needs application services or clearer separation from registration code:
- Implement IConfigureOptions<CurrencyOptions> and inject ICurrencyProvider through the constructor. section 31.2
- Register the implementation with the dependency-injection container after binding configuration when its values should override earlier configuration. section 31.2
- Register injected dependencies with compatible lifetimes; a singleton configurator must not capture scoped or transient services. section 31.2
Configure currencies from a service
public class ConfigureCurrencyOptions : IConfigureOptions<CurrencyOptions> { private readonly ICurrencyProvider _currencyProvider; public ConfigureCurrencyOptions(ICurrencyProvider currencyProvider) { _currencyProvider = currencyProvider; } public void Configure(CurrencyOptions options) { options.Currencies = _currencyProvider.GetCurrencies(); } } builder.Services.AddOptions<CurrencyOptions>() .BindConfiguration("Currencies"); builder.Services.AddSingleton<IConfigureOptions<CurrencyOptions>, ConfigureCurrencyOptions>(); builder.Services.AddSingleton<ICurrencyProvider, CurrencyProvider>(); When IOptions<CurrencyOptions> is requested, configuration binding occurs first, followed by the configurator. section 31.2
