HTML5技术

ASP.NET Core的配置(1):读取配置信息 - Artech(3)

字号+ 作者:H5之家 来源:博客园 2016-04-19 18:00 我要评论( )

在真正的项目开发过程中,我们都不会直接使用直接读取的配置,而都倾向于像我们演示的两个实例一样通过创建相应的类型(比如DateTimeFormatSettings、CurrencyDecimalSettings和FormatSettings)来定义一组相关的配

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

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

ASP.NET Core针对配置的Option模型(OptionModel)帮助我们实现了从配置到Option对象之间的绑定,接下来我们就对此做一个简单的演示。Option模型实现在“Microsoft.Extensions.OptionModel”这个NuGet包中,除此之外,我们需要采用依赖注入的方式来使用Option模型,所以我们需要按照如下的方式为应用添加针对相应的依赖。

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

借助于Option模型的自动绑定机制,我们无需再手工地读取配置信息,所以我们将FormatSettings、DateTimeFormatSettings和CurrencyDecimalSettings的构造函数删除,只保留其属性成员。在作为程序入口的Main方法中,我们采用如下的方式创建这个表示格式设置的FormatSettings对象。

Main(string[] args) 4: { 5: Dictionary<string, string> source = new Dictionary<string, string> 6: { 7: ["Format:DateTime:LongDatePattern"] = "dddd, MMMM d, yyyy", 8: ["Format:DateTime:LongTimePattern"] = "h:mm:ss tt", 9: ["Format:DateTime:ShortDatePattern"] = "M/d/yyyy", 10: ["Format:DateTime:ShortTimePattern"] = "h:mm tt", 11:  12: ["Format:CurrencyDecimal:Digits"] = "2", 13: ["Format:CurrencyDecimal:Symbol"] = "$", 14: }; 15: IConfiguration configuration = new ConfigurationBuilder() 16: .Add(new MemoryConfigurationProvider(source)) 17: .Build() 18: .GetSection("Format")); 19:  20: IOptions<FormatSettings> optionsAccessor = new ServiceCollection() 21: .AddOptions() 22: .Configure<FormatSettings>(configuration) 23: .BuildServiceProvider() 24: .GetService<IOptions<FormatSettings>>(); 25:  26: FormatSettings settings = optionsAccessor.Value; 27:  28: Console.WriteLine("DateTime:"); 29: Console.WriteLine("\t{0,-16}: {1}", "LongDatePattern",settings.DateTime.LongDatePattern); 30: Console.WriteLine("\t{0,-16}: {1}", "LongTimePattern",settings.DateTime.LongTimePattern); 31: Console.WriteLine("\t{0,-16}: {1}", "ShortDatePattern",settings.DateTime.ShortDatePattern); 32: Console.WriteLine("\t{0,-16}: {1}\n", "ShortTimePattern",settings.DateTime.ShortTimePattern); 33:  34: Console.WriteLine("CurrencyDecimal:"); 35: Console.WriteLine("\t{0,-16}: {1}", "Digits",settings.CurrencyDecimal.Digits); 36: Console.WriteLine("\t{0,-16}: {1}", "Symbol",settings.CurrencyDecimal.Symbol); 37: } 38: }

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

 

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

相关文章
  • 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

  • vue全局配置----小白基础篇 - 星光笔

    vue全局配置----小白基础篇 - 星光笔

    2017-04-28 08:04

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

    十二个 ASP.NET Core 例子 - Savorboard

    2017-04-27 16:01

网友点评