2014-12-05 110 views
2

繼續從StackOverflow有關Using IConfiguration globally in mvc6的問題。對已接受的答案的評論建議使用使用服務從config.json配置屬性。配置

services.Configure<SomeOptions>(Configuration); 

現在可以正常使用以下代碼;

public class SomeOptions 
{ 
    public string MyOption { get; set; } 
} 

config.json

{ 
    "MyOption": "OptionValue" 
} 

Startup.cs

public Startup(IHostingEnvironment env) 
{ 
    Configuration = new Configuration() 
     .AddJsonFile("config.json") 
     .AddEnvironmentVariables(); 
} 

public void ConfigureServices(IServiceCollection services) 
{   
    services.Configure<SomeOptions>(Configuration); 
} 

然而config.json文件沒有任何真正的結構,我希望它看起來更像;

{ 
    "SomeOptions": { 
     "MyOption": "OptionValue" 
    } 
} 

但是,這不會綁定類中的值。無論如何要允許這個嗎?

回答

1

如果你想改變config.json結構,你還需要改變你的類結構

{ 
    "SomeOptions": { 
     "MyOption": "OptionValue" 
    } 
} 

映射到像

public class SomeOptions 
{ 
    public List<MyOption> MyOptions { get; set; } 
} 

public class MyOption 
{ 
    public string OptionValue { get; set; } 
} 
+0

這不起作用。 – 2014-12-08 14:33:20

+0

究竟是行不通的? – 2014-12-08 14:40:47

+0

你有什麼建議。 'MyOptions'爲空 – 2014-12-08 14:49:46

0

您可以在config.json訪問諸如特定值:

Configuration.Get("SomeOptions:MyOption"); 

哪那麼返回

"OptionValue" 

,您的代碼將是

services.Configure<SomeOptions>(options => 
     options.MyOption = Configuration.Get("SomeOptions:MyOption")); 
+0

嗨,Master19,謝謝。不過,我期望沒有「魔術串」。 – 2015-01-07 14:28:38

0
services.Configure<SomeOptions>(Configuration.GetSubKey(nameof(SomeOptions))); 

應該這樣做。