2016-12-02 52 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)); 

這是有這麼多的模塊化封裝的缺點後續擴展。很容易失去功能存在的地方。