Настройка параметров из IConfigurationRoot не работает?

Следующий код вырезается из примеров в docs.asp.net.

public void ConfigureServices(IServiceCollection services)
{
    // Setup options with DI
    services.AddOptions();

    // Configure MyOptions using config
    services.Configure<MyOptions>(Configuration);

    // Configure MyOptions using code
    services.Configure<MyOptions>(myOptions =>
    {
        myOptions.Option1 = "value1_from_action";
    });

Вызов services.Configure<MyOptions>(Configuration); вызывает ошибку компиляции:

не может конвертировать из "Microsoft.Extensions.Configuration.IConfigurationRoot" в "System.Action"

Ручная настройка параметров работает нормально. Я пропустил что-то действительно очевидное здесь?

Ответы

Ответ 1

У меня была такая же проблема, и я узнал, что вам нужно добавить это расширение в свой проект:

Microsoft.Extensions.Options.ConfigurationExtensions

Ответ 2

Вам необходимо добавить следующий пакет nuget в ваш основной проект ASP, если вы хотите сконфигурировать строго типизированный конфиг таким образом.

Microsoft.Extensions.Options.ConfigurationExtensions

Методы расширения, содержащиеся в пакете, позволят вам настроить строго типизированную конфигурацию так, как вы хотите, и способ отображения большинства обучающих программ.

services.Configure<MyOptions>(Configuration);

Альтернативно, вы можете добавить еще один пакет связующего:

Microsoft.Extensions.Configuration.Binder

Конфигурация будет выглядеть примерно так:

services.AddOptions();
services.Configure<MyOptions>(x => Configuration.Bind(x));

Это недостаток в том, что у вас так много модульных упакованных расширений. Легко потерять информацию о том, где есть функциональность.