Настройка свойств из 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)));
Должен сделать это.