2014-12-05 109 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))); 

应该这样做。