HTML5技术

.NET Core采用的全新配置系统[1]: 读取配置数据 - Artech(3)

字号+ 作者:H5之家 来源:博客园 2016-07-16 13:00 我要评论( )

1: DateTime: 2: LongDatePattern : dddd, MMMM d, yyyy 3: LongTimePattern : h:mm:ss tt 4: ShortDatePattern: M/d/yyyy 5: ShortTimePattern: h:mm tt 6: 7: CurrencyDecimal: 8: Digits: 2 9: Symbol: $ 四、将

1: DateTime: 2: LongDatePattern : dddd, MMMM d, yyyy 3: LongTimePattern : h:mm:ss tt 4: ShortDatePattern: M/d/yyyy 5: ShortTimePattern: h:mm tt 6:  7: CurrencyDecimal: 8: Digits : 2 9: Symbol : $


四、将结构化配置直接绑定为对象

在真正的项目开发过程中,我们倾向于像我们演示的两个实例一样通过创建相应的类型(比如演示实例中的DateTimeFormatOptions、CurrencyDecimalOptions和FormatOptions)来定义一组相关的配置选项(Option),我们将定义配置选项(Option)的这些类型称为Option类型。在上面演示的实例中,为了创建这些封装配置的对象,我们都是采用手工读取配置的形式,如果定义的配置项太多的话,逐条读取配置项其实是一项非常繁琐的工作。

对于一个对象来说,如果我们将它的属性视为它的子节点,一个对象同样具有类似于Configuration对象的树形层次结构。如果我们根据某个Option类型的结构来定义配置,或者根据配置的结构来定义这个Option类型,Option类型的属性成员将与某个配置节具有一一对应的关系,那么原则上我们可以自动将配置信息绑定为一个具体的Option对象。

.NET Core的配置系统采用一种叫做“Options Pattern”的编程模式来支持从原始配置到Options对象之间的绑定。这种编程模式涉及的API定义在“Microsoft.Extensions.Options.ConfigurationExtensions”这个NuGet包中,所以我们需要在project.json文件中按照如下的方式添加针对性的依赖。除此之外,“Options Pattern”涉及到对DI的使用,所以我们还需要添加针对NuGet包“Microsoft.Extensions
.DependencyInjection”的依赖。

: "1.0.0", 5: "Microsoft.Extensions.DependencyInjection" : "1.0.0" 6: }, 7: }

借助于Options Pattern的自动绑定机制,我们无需逐条地读取配置,所以我们可以将这个三个Options类型(DateTimeFormatOptions、CurrencyDecimalOptions和FormatOptions)的构造函数全部删除,只保留其属性成员。在作为程序入口的Main方法中,我们采用如下的方式创建这个表示格式设置的FormatOptions对象。

1: ... 2: FormatOptions options = new ServiceCollection() 3: .AddOptions() 4: .Configure<FormatOptions>(config.GetSection("Format")) 5: .BuildServiceProvider() 6: .GetService<IOptions<FormatOptions>>() 7: .Value;

如上面的代码片段所示,我们创建一个ServiceCollection对象并调用扩展方法AddOptions注册于针对Option模型的服务。接下来我们调用Configure方法将FormatOptions这个Option类型与对应的Configuration对象进行映射。我们最后利用这个ServiceCollection对象生成一个ServiceProvider,并调用其GetService方法得到一个类型为IOptions<FormatOptions>的对象,后者的Value属性返回的就是绑定了相关配置的FormatOptions对象。

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • [移动端] IOS下border-image不起作用的解决办法 - 小路_同学

    [移动端] IOS下border-image不起作用的解决办法 - 小路_同学

    2017-05-02 12:04

  • Dora.Interception: 一个为.NET Core度身定制的AOP框架 - Artech

    Dora.Interception: 一个为.NET Core度身定制的AOP框架 - Artech

    2017-05-02 11:00

  • 如何在 ASP.NET Core 中发送邮件 - Savorboard

    如何在 ASP.NET Core 中发送邮件 - Savorboard

    2017-05-02 08:02

  • 十二个 ASP.NET Core 例子 - Savorboard

    十二个 ASP.NET Core 例子 - Savorboard

    2017-04-27 16:01

网友点评
0