绑定集合 var source = new Dictionary<string, string> { ["0:gender"] = "Male", //["0:age"] = "18", //["0:contactInfo:emailAddress"] = "foo@outlook.com", //["0:contactInfo:phoneNo"] = "123", //["1:gender"] = "Male", //["1:age"] = "25", //["1:contactInfo:emailAddress"] = "bar@outlook.com", //["1:contactInfo:phoneNo"] = "456", //["2:gender"] = "Female", //["2:age"] = "36", //["2:contactInfo:emailAddress"] = "baz@outlook.com", //["2:contactInfo:phoneNo"] = "789" }; var configuration = new ConfigurationBuilder() .AddInMemoryCollection(source) .Build(); var list = configuration.Get<IList<Profile>>();
此处在configuration 存储为字典后
到ConfigurationBinder 里查找出值
在下面get哪里执行到ConfigurationProvider的GetChildKeys(IEnumerable<string> earlierKeys, string parentPath)
最开始parentPath 为null ,则遍历对象里的data,并存储到集合里并通过 Segment 获取值前面的index 0 或1
获取到的键为0(Segment 中用 : 做分割判断符号,这也是一个常量 )
然后添加早些时候的key(这里还不太明白)
排序返回,然后到 root.GetSection() 在ConfigurationSection
通过 _root = root;
_path = path;
根据键获取值 和path
获取 Key ,Path,Value
获取到数据
然后返回的binder,FindOpenGenericInterface()判断是否字典还是集合
通过字典或者集合绑定数据
如果不是字典,集合,则绑定属性
以绑定集合为例
在获取config.GetChildren() 并遍历
到BindInstance里去绑定
获取 IConfigurationSection下的值
为null在去GetChildKeys 去获取,用前面获取到的index
这是获取到的键为gender.
然后到 root.GetSection() 在ConfigurationSection
根据键获取值 和path
然后
bindingPoint.SetValue(CreateInstance(type, config, options))
CreateInstance 创建泛型里那个参数的对象
在通过BindProperty 通过 绑定属性值和对象
然后又是 根据键去获取值在绑定
并返回
标签:contactInfo,gender,绑定,获取,path,Net6,configuration,ConfigurationBinder From: https://www.cnblogs.com/liujian1368928/p/17087646.html