Настройка свойств из config.json с помощью сервисов.

В продолжение вопроса Stackru, касающегося глобального использования IConfiguration в mvc6. Комментарий к принятому ответу предлагает использовать

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"
    }
}

Однако это не связывает значения в классе. Есть ли способ разрешить это?

3 ответа

Вы можете получить доступ к конкретному значению в config.json, например:

Configuration.Get("SomeOptions:MyOption");

Который возвращается

"OptionValue"

Итак, ваш код будет

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

Если вы хотите изменить config.json структура вам также нужно изменить структуру вашего класса.

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

карты на что-то вроде

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

public class MyOption
{
    public string OptionValue { get; set; }
}
services.Configure<SomeOptions>(Configuration.GetSubKey(nameof(SomeOptions)));

Должен сделать это.

Другие вопросы по тегам