Настройка параметров из 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.Увеличение.Конфигурация.IConfigurationRoot 'to' система.Действие'

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

2 ответов


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

Microsoft.Увеличение.Опции.ConfigurationExtensions


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

Microsoft.Extensions.Options.ConfigurationExtensions

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

services.Configure<MyOptions>(Configuration);

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

Microsoft.Extensions.Configuration.Binder

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

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

это недостаток иметь так много модульных упакованных вверх расширений. Становится легко потерять след, где функциональность существует.