ASP.NET Core的配置(3): 将配置绑定为对象[上篇]
作者:网络转载 发布时间:[ 2016/6/7 14:47:45 ] 推荐标签:ASP.NET Core 配置管理
xxx如果需要通过配置的形式来表示一个完整的Profile对象,我们只需要将四个叶子节点(性别、年龄、电子邮箱地址和电话号码)对应的数据定义在配置之中即可。对于承载配置数据的数据字典中,我们需要按照如左边表格所示的方式将这四个叶子节点的路径作为字典元素的Key。
我们通过一个简单示例来演示针对复杂对象的配置绑定。我们创建一个ASP .NET Core控制台应用中,并在project.json文件中添加针对NuGet包“Microsoft.Extensions.Configuration.Binder”的依赖。我们在作为程序入口的Main方法中定义了如下所示的程序。
1: public class Program
2: {
3: public static void Main(string[] args)
4: {
5: IConfiguration configuration = new ConfigurationBuilder().Add(new MemoryConfigurationProvider(new Dictionary<string, string>
6: {
7: ["Profile:Gender"] = "Male",
8: ["Profile:Age"] = "18",
9: ["Profile:ContactInfo:Email"] = "foobar@outlook.com",
10: ["Profile:ContactInfo:PhoneNo"]= "123456789",
11: })).Build();
12:
13: Profile profile = configuration.Get<Profile>("Profile");
14: Console.WriteLine("{0,-10}:{1}", "Gender", profile.Gender);
15: Console.WriteLine("{0,-10}:{1}", "Age", profile.Age);
16: Console.WriteLine("{0,-10}:{1}", "Email", profile.ContactInfo.Email);
17: Console.WriteLine("{0,-10}:{1}", "PhoneNo", profile.ContactInfo.PhoneNo);
18: }
19: }
如上面的代码片段所示,我们创建了一个ConfigurationBuilder对象并为之添加了一个MemoryConfigurationProvider,后者按照如表2所示的结构提供了原始的配置数据。我们利用这个ConfigurationBuilder对象创建的Configuration对象并调用这个ConfigurationSection的Get方法将Key为“Profile”的配置节绑定为一个Profile对象。为了验证配置绑定是否成功,我们终将这个绑定的Profile对象的相关信息打印出来。该程序执行之后会在控制台上产生如下所示的输出结果。
1: Gender :Male
2: Age :18
3: Email :foobar@outlook.com
4: PhoneNo :123456789
四、绑定集合对象
配置绑定从本质上讲是承载相同信息的数据在不同结构之间的转换,说得更加具体一点是数据从基于数据字典的物理结构转换成基于树的逻辑结构。要理解针对集合的配置绑定,需要首先了解一个集合对象在逻辑上体现怎样一棵树。对于一个集合对象来说,组成它的元素自然视为集合的子节点,所以一个包含三个Profile对象的集合可以由左图所示的树来体现。
但是如8所示的这棵树并不是一个合法的配置树。对于这棵树来说,表示集合元素的配置节都采用“Profile”作为Key,这导致了所有叶子节点的路径并不是的。由于路径不,我们自然不能将它作为一个字典对象的Key,那么构成这个集合的原子数据将无法通过一个数据字典来承载。为了解决这个问题,我们将集合元素的索引(0、1、2、 …)对应的配置节的Key,所以右图所示的才是真正配置树的结构。
既然我们能够正确将集合对象通过一个合法的配置树体现出来,那么我们可以直接利用一个字典对象来提供构成这个集合对象的所有原子数据。数据字典中的每一个元素对应着配置树中的某个叶子结点,后者的路径直接作为字典元素的Key, 下面的表格清晰地体现了这个数据字典的结构。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11