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

Gle*_*lls 14 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";
    });
Run Code Online (Sandbox Code Playgroud)

调用services.Configure<MyOptions>(Configuration); 导致编译错误:

无法从'Microsoft.Extensions.Configuration.IConfigurationRoot'转换为'System.Action'

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

小智 22

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

Microsoft.Extensions.Options.ConfigurationExtensions

  • 更具体地说,作为project.json中的依赖项 (4认同)

Sar*_*zen 5

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

Microsoft.Extensions.Options.ConfigurationExtensions
Run Code Online (Sandbox Code Playgroud)

包中包含的扩展方法将允许您以您想要的方式和大多数教程显示的方式配置强类型配置。

services.Configure<MyOptions>(Configuration);
Run Code Online (Sandbox Code Playgroud)

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

Microsoft.Extensions.Configuration.Binder
Run Code Online (Sandbox Code Playgroud)

然后配置看起来像这样:

services.AddOptions();
services.Configure<MyOptions>(x => Configuration.Bind(x));
Run Code Online (Sandbox Code Playgroud)

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