Ответ 1
Таким образом, есть два способа обойти это.
Вариант 1: класс опций
У вас есть файл appsettings.json:
{
"myConfiguration": {
"myProperty": true
}
}
Вы создаете POCO конфигурации так:
public class MyConfiguration
{
public bool MyProperty { get; set; }
}
В вашем startup.cs у вас есть что-то в вашем ConfigureServices, которое регистрирует конфигурацию:
public void ConfigureServices(IServiceCollection services)
{
services.Configure<MyConfiguration>(Configuration.GetSection("myConfiguration"));
}
Затем в вашем контроллере/службе вы вводите в IOptions и его можно использовать.
public class ValuesController : Controller
{
private readonly MyConfiguration _myConfiguration;
public ValuesController(IOptions<MyConfiguration> myConfiguration)
{
_myConfiguration = myConfiguration.Value;
}
}
Лично мне не нравится использовать IOptions, потому что я думаю, что он тянет вперед какой-то дополнительный барахло, которого я действительно не хочу, но вы можете делать такие классные вещи, как горячая замена и прочее.
Вариант 2: Конфигурация POCO
Это в основном то же самое, но в вашем методе Configure Services вместо этого вы привязываетесь к одиночному элементу своего POCO.
public void ConfigureServices(IServiceCollection services)
{
//services.Configure<MyConfiguration>(Configuration.GetSection("myConfiguration"));
services.AddSingleton(Configuration.GetSection("myConfiguration").Get<MyConfiguration>());
}
И тогда вы можете просто ввести POCO напрямую:
public class ValuesController : Controller
{
private readonly MyConfiguration _myConfiguration;
public ValuesController(MyConfiguration myConfiguration)
{
_myConfiguration = myConfiguration;
}
}
Немного упрощен, потому что вы, вероятно, должны использовать интерфейс, чтобы сделать модульное тестирование немного проще, но вы поняли эту идею.
В основном взяты отсюда: http://dotnetcoretutorials.com/2016/12/26/custom-configuration-sections-asp-net-core/