首页 > 其他分享 >Net6 ConfigurationBinder configuration转为对象(未完成)

Net6 ConfigurationBinder configuration转为对象(未完成)

时间:2023-02-02 22:46:10浏览次数:50  
标签:contactInfo gender 绑定 获取 path Net6 configuration ConfigurationBinder

绑定集合

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

相关文章