Инъекция IConfiguration
- это анти-паттерн. Вы должны создать строго типизированный класс и внедрить его вместо этого. Как отметил @Steven в комментариях, IOptions<T>
является излишним, но есть смысл вводить IOptionsSnapshot<T>
, так как это будет отвечать на перезагрузки конфигурации. Вы также можете получить лучшее из обоих миров и зарегистрировать свой строго типизированный экземпляр класса как функцию IOptionsSnapshot<T>
, чтобы можно было внедрить что-то вроде ThirdPartyApi
, но при этом получать обновления конфигурации:
services.Configure<ThirdPartyApi>(Configuration.GetSection("ThirdPartyApi"));
services.AddTransient(p => p.GetRequiredService<IOptionsSnapshot<ThirdPartyApi>>().Value);
Просто имейте в виду, что при таком подходе настройки будут ограничены объектом, в который они вводятся. Например, если вы внедрите в одиночный файл, они фактически никогда не будут перезагружены, потому что обновление произойдет только во время внедрения. Если вы хотите убедиться, что вы всегда используете самую последнюю конфигурацию, вы должны вводить IOptionsSnapshot<T>
напрямую и обращаться к атрибуту Value
каждый раз, чтобы получить значения конфигурации.