





















using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; namespace ConfigurationDemo.Controllers; [ApiController] [Route("[controller]")] public class ConfigurationController(IConfiguration configuration) : ControllerBase { [HttpGet] [Route("my-key")] public ActionResult GetMyKey() { var myKey = configuration["MyKey"]; return Ok(myKey); } [HttpGet] [Route("database-configuration")] public ActionResult GetDatabaseConfiguration() { var type = configuration["database:Type"]; var connectionString = configuration["Database:ConnectionString"]; return Ok(new { Type = type, ConnectionString = connectionString }); } [HttpGet] [Route("database-configuration-with-bind")] public ActionResult GetDatabaseConfigurationWithBind() { var databaseOption = new DatabaseOption(); // The `SectionName` is defined in the `DatabaseOption` class, which shows the section name in the `appsettings.json` file. configuration.GetSection(DatabaseOption.SectionName).Bind(databaseOption); // You can also use the code below to achieve the same result // configuration.Bind(DatabaseOption.SectionName, databaseOption); return Ok(new { databaseOption.Type, databaseOption.ConnectionString }); } [HttpGet] [Route("database-configuration-with-generic-type")] public ActionResult GetDatabaseConfigurationWithGenericType() { var databaseOption = configuration.GetSection(DatabaseOption.SectionName).Get<DatabaseOption>(); return Ok(new { databaseOption?.Type, databaseOption?.ConnectionString }); } [HttpGet] [Route("database-configuration-with-ioptions")] public ActionResult GetDatabaseConfigurationWithIOptions([FromServices] IOptions<DatabaseOption> options) { var databaseOption = options.Value; return Ok(new { databaseOption.Type, databaseOption.ConnectionString }); } [HttpGet] [Route("database-configuration-with-ioptions-snapshot")] public ActionResult GetDatabaseConfigurationWithIOptionsSnapshot([FromServices] IOptionsSnapshot<DatabaseOption> options) { var databaseOption = options.Value; return Ok(new { databaseOption.Type, databaseOption.ConnectionString }); } [HttpGet] [Route("database-configuration-with-ioptions-monitor")] public ActionResult GetDatabaseConfigurationWithIOptionsMonitor([FromServices] IOptionsMonitor<DatabaseOption> options) { var databaseOption = options.CurrentValue; return Ok(new { databaseOption.Type, databaseOption.ConnectionString }); } [HttpGet] [Route("database-configuration-with-named-options")] public ActionResult GetDatabaseConfigurationWithNamedOptions([FromServices] IOptionsSnapshot<DatabaseOptions> options) { var systemDatabaseOption = options.Get(DatabaseOptions.SystemDatabaseSectionName); var businessDatabaseOption = options.Get(DatabaseOptions.BusinessDatabaseSectionName); return Ok(new { SystemDatabaseOption = systemDatabaseOption, BusinessDatabaseOption = businessDatabaseOption }); } }
所有读取配置的方式可以分成 3 大类:
1. 最原始:直接用 IConfiguration["key"] 读取
var myKey = configuration["MyKey"];
var type = configuration["database:Type"];
: 分隔configuration.GetSection("Database").Bind(databaseOption);
Get<T>()var databaseOption = configuration.GetSection(...).Get<DatabaseOption>();
IOptions<T> —— 单例、启动时读取一次IOptionsSnapshot<T> —— 作用域内缓存(每次请求重新加载)IOptionsMonitor<T> —— 实时监听、立即更新Named Options —— 多套同结构配置options.Get("SystemDatabase");
options.Get("BusinessDatabase");
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。