2

Following on from a StackOverflow question regarding Using IConfiguration globally in mvc6. A comment to the accepted answer suggests using

services.Configure<SomeOptions>(Configuration);

Now this works fine with the following code;

Class

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

However the config.json file doesn't have any really structure, and I would like it to look more like;

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

However this does not bind the values within the class. Is there anyway to allow this?

3 Answers 3

2

If you want to change the config.json structure you also need to change your class structure.

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

maps to something like

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

public class MyOption
{
    public string OptionValue { get; set; }
}
Sign up to request clarification or add additional context in comments.

1 Comment

What you have suggested. MyOptions is null
2

You can access specific value in config.json like:

Configuration.Get("SomeOptions:MyOption");

Which returns

"OptionValue"

So, your code will be

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

1 Comment

Hi Master19, thanks. I am looking to do it without "magic strings" though.
0
services.Configure<SomeOptions>(Configuration.GetSubKey(nameof(SomeOptions)));

Should do it.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.