如何将Appsettings配置节绑定到Dictionary<int,int>并通过Configure方法注册
解决方案
首先明确:标准JSON规范要求对象的键必须是字符串类型,你原有配置中直接写1: 14的写法不符合JSON规范,会直接导致配置读取失败,调整方式非常简单:
- 修正
appsettings.json配置为合法格式,仅需给键加双引号即可,无需修改其他结构:
"ProductSettings": { "ProductValues": { "1": 14, "2": 30 } }
- 你已定义的
ProductSettings类不需要做任何修改,保留Dictionary<int, int>类型的ProductValues属性即可:
public class ProductSettings { public Dictionary<int, int> ProductValues{ get; set; } }
- 服务注册代码完全沿用你原来的写法即可:
services.Configure<ProductSettings>(configuration.GetSection("ProductSettings"));
原理说明
.NET配置系统的绑定器自带类型转换能力,在绑定到泛型字典时,会自动将JSON中读取到的字符串键,转换为你定义的字典键的目标类型(这里就是int),只要配置中键的字符串内容符合int格式,就能绑定成功。最终你通过IOptions<ProductSettings>注入拿到的配置实例中,ProductValues的键就是int类型,直接按int索引取值即可:
// 注入示例 public class DemoService { private readonly ProductSettings _settings; public DemoService(IOptions<ProductSettings> options) { _settings = options.Value; // 直接用int作为键取值,返回14 var val1 = _settings.ProductValues[1]; } }
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

