addOptions<TOptions> method

OptionsBuilder<TOptions> addOptions<TOptions>(
  1. OptionsImplementationFactory<TOptions> instance, {
  2. String name = Options.defaultName,
})

Adds services required for using options.

Implementation

OptionsBuilder<TOptions> addOptions<TOptions>(
  OptionsImplementationFactory<TOptions> instance, {
  String name = Options.defaultName,
}) {
  tryAdd(
    ServiceDescriptor.singleton<Options<TOptions>>(
      (ServiceProvider sp) => UnnamedOptionsManager<TOptions>(
        sp.getRequiredService<OptionsFactory<TOptions>>(),
      ),
    ),
  );

  tryAdd(
    ServiceDescriptor.scoped<OptionsSnapshot<TOptions>>(
      (sp) => OptionsManager<TOptions>(
        instance,
        sp.getRequiredService<OptionsFactory<TOptions>>(),
      ),
    ),
  );

  tryAdd(
    ServiceDescriptor.singleton<OptionsMonitor<TOptions>>(
      (ServiceProvider sp) => OptionsMonitor<TOptions>(
        sp.getRequiredService<OptionsFactory<TOptions>>(),
        sp.getServices<OptionsChangeTokenSource<TOptions>>(),
        sp.getRequiredService<OptionsMonitorCache<TOptions>>(),
      ),
    ),
  );

  tryAdd(
    ServiceDescriptor.transient<OptionsFactory<TOptions>>(
      (sp) => OptionsFactory<TOptions>(
        instance,
        setups: sp.getServices<ConfigureOptions<TOptions>>(),
        postConfigureOptions:
            sp.getServices<PostConfigureOptions<TOptions>>(),
        validations: sp.getServices<ValidateOptions<TOptions>>(),
      ),
    ),
  );

  tryAdd(
    ServiceDescriptor.singleton<OptionsMonitorCache<TOptions>>(
      (sp) => OptionsCache<TOptions>(instance),
    ),
  );

  return OptionsBuilder<TOptions>(
    this,
    name,
  );
}