IConfigurationRoot中的选项配置不起作用?

时间:2016-05-19 12:39:18

标签: asp.net-core-1.0

以下代码摘自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'

手动设置选项可以正常工作。我错过了一些非常明显的东西吗?

2 个答案:

答案 0 :(得分:21)

我遇到了同样的问题,我发现你需要将这个扩展添加到你的项目中:

Microsoft.Extensions.Options.ConfigurationExtensions

答案 1 :(得分:4)

如果要以这种方式配置强类型配置,则需要将以下nuget包添加到ASP核心项目中。

Microsoft.Extensions.Options.ConfigurationExtensions

包中包含的扩展方法将允许您按照您希望的方式配置强类型配置以及大多数教程显示的方式。

services.Configure<MyOptions>(Configuration);

或者,您可以添加另一个活页夹包:

Microsoft.Extensions.Configuration.Binder

配置看起来像这样:

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

这是拥有如此多模块化打包扩展的缺点。很容易忘记功能存在的位置。