强类型配置asp核心

时间:2016-12-02 13:30:21

标签: asp.net-core

我正在尝试创建一个强类型的配置部分,但很难。示例显示我可以拥有一个POCO,只需在我的json中有一个条目就可以自动解析。

这就是我在ConfigureServices()中所拥有的。请注意,configurationIConfigurationRoot

    public void ConfigureServices(IServiceCollection services)
    {
        services
            .AddOptions()
            .AddMvcCore()
            .AddJsonFormatters();

        services.Configure<MySettings>(this.configuration.GetSection("MySettings"));           
    }

这是我的POCO

public class MySettings
{
    public string Foo { get; set; }
}

我收到编译错误Error:(41, 44) : Argument 2: cannot convert from 'Microsoft.Extensions.Configuration.IConfigurationSection' to 'System.Action<MySettings>'

JSON配置:

{
    "MySettings": {
        "Foo": "hello world"
    }
}
显然,我正在做一些愚蠢的事,但不确定这可能是什么。网络上的所有来源都建议“应该”工作。

如果需要进一步的信息,我可以提供。

2 个答案:

答案 0 :(得分:0)

你错过了

"Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0"

在你的project.json文件中。

(在特定情况下版本可能会有所不同)

答案 1 :(得分:0)

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

Microsoft.Extensions.Options.ConfigurationExtensions

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

services.Configure<MyOptions>(Configuration);

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

Microsoft.Extensions.Configuration.Binder

配置看起来像这样:

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

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