Configurando propriedades de config.json usando services.Configure

votos
2

Na sequência de uma pergunta StackOverflow sobre Usando IConfiguration globalmente em mvc6 . Um comentário para a resposta aceita sugere o uso de

services.Configure<SomeOptions>(Configuration);

Agora isso funciona bem com o seguinte código;

Classe

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);
}

No entanto, o config.jsonarquivo não tem qualquer realmente estrutura, e eu gostaria que ele olhar mais como;

{
    SomeOptions: {
        MyOption: OptionValue
    }
}

No entanto, este não vincula os valores dentro da classe. Existe uma maneira de permitir isso?

Publicado 05/12/2014 em 15:11
fonte usuário
Em outras línguas...                            


3 respostas

votos
2

Se você quiser alterar a config.jsonestrutura que você também precisa mudar sua estrutura de classes .

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

mapas para algo como

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

public class MyOption
{
    public string OptionValue { get; set; }
}
Respondeu 06/12/2014 em 10:00
fonte usuário

votos
1

Você pode acessar o valor específico em config.json como:

Configuration.Get("SomeOptions:MyOption");

que retorna

"OptionValue"

Assim, seu código será

services.Configure<SomeOptions>(options => 
        options.MyOption = Configuration.Get("SomeOptions:MyOption"));
Respondeu 07/01/2015 em 14:02
fonte usuário

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

Deve fazê-lo.

Respondeu 15/05/2015 em 07:30
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more