2016-12-02 77 views
0

我想创建一个强类型的配置节,但挣扎。示例显示我可以拥有一个POCO,并且只需在我的json中有一个条目,这应该会自动解决。强类型配置asp核心

这就是我在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" 
    } 
} 

很显然,我在做一些愚蠢的,但不确定这可能是什么。网络上的所有消息都表明这个“应该”工作。

如果需要更多信息,我可以提供。

+0

您是否对您的project.json中的Microsoft.Extensions.Options.ConfigurationExtensions存在依赖关系?你需要的是,然后注入的是IOptions 然后让MySettings访问IOptions的.Value属性 –

+0

是的,我注意到了这一点,但是this.configuration.GetSection(“”)。绑定(你的对象实例) ;可能是失踪的难题 –

+0

我在做同样的事情没有。绑定它适用于我 –

回答

0

你缺少

"Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0" 
在project.json文件

(该版本可能是在您的具体情况不同)

+0

谢谢,那是缺失的参考作品! –

0

更完整的答案是,你需要将以下NuGet包添加到您的ASP核心项目,如果你想配置这样的强类型配置。

Microsoft.Extensions.Options.ConfigurationExtensions 

包中包含的扩展方法将允许您配置强类型的配置,您想要的方式,最教程带路。

services.Configure<MyOptions>(Configuration); 

或者,您可以添加其它粘合剂包装:然后

Microsoft.Extensions.Configuration.Binder 

配置会是这个样子:

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

这是有这么多的模块化封装的缺点后续扩展。很容易失去功能存在的地方。