特别说明:1、本系列内容主要基于杨中科老师的书籍《ASP.NET Core技术内幕与项目实战》及配套的B站视频视频教程,同时会增加极少部分的小知识点2、本系列教程主要目的是提炼知识点,追求快准狠,以求快速复习,如果说书籍学习的效率是视频的2倍,那么“简读系列”应该做到再快3-5倍本节内容 , 涉及3.2(P60-P69),7.2(P188-P193),NuGet包
- Microsoft.Extensions.Configuration
- Microsoft.Extensions.Configuration.Json
- Microsoft.Extensions.Configuration.CommandLine
- Microsoft.Extensions.Configuration.EnvironmentVariables
- Microsoft.Extensions.Configuration.Binder
- Microsoft.Extensions.Options
- ...
1 //appsetting.json文件,需设置为“如果较新则复制” 2 { 3"name": "functionMC", 4"proxy": { 5"address": "192.1.1.1", 6"port": 1088 7} 8 } 91011 //Program.cs12 ConfigurationBuilder configBuilder = new ConfigurationBuilder();13 configBuilder.AddJsonFile("appsettings.json", optional: false, reloadOnChange:false);14 IConfigurationRoot config = configBuilder.Build();1516 string name = config["proxy:address"];17 Console.WriteLine(name);1819 string proxyAddress = config.GetSection("name").Value;20 Console.WriteLine(proxyAddress);代码解释:
12-13行:构建ConfigurationBuild对象,并调用该对象的AddJsonFile方法,加载Json配置文件
14行:调用ConfigurationBuild对象的Build方法,构建IConfigurationRoot对象-config,用于读取配置
16行:通过config["key"]方式,读取key值,读取联级key的方式 , 与config.GetSection一致 , "proxy:address"
19行:通过config.GetSection方法 , 读取key值
补充说明:
①涉及类型: ConfigurationBuild(配置)、IConfigurationRoot(读?。?体现面向接口编程,根据不同的配置源有不同的实现
②13行可以设置其它配置源:
- 从命令行读?。篶onfigBuild.AddCommandLine(args);
- 从环境变量读?。篶onfigBuild.AddEnvironmentVariables("Test_"),其中Test_为环境变量的前缀,可以实现过滤
- 其它配置源:INI文件、XML文件、Key-per-file文件、用户机密、第三方配置提供程序等
- 当在13行,配置多个数据源时 , 按Add的添加顺序读?。绻喔雠渲迷瓷柚昧讼嗤膋ey,则后面的key值覆盖前面的key值
- 在ASP.NET Core , 已经默认添加了多个配置源 , 添加顺序为appsettings.json < appsettings.[运行时环境变量].json< 用户机密 < 环境变量 < 命令行
二、通过选项方式读取
1 //appsettings.json文件 2 { 3"Smtp": { 4"Server": "smtp.youzack.com", 5"UserName": "functionMC", 6"Password": "hello123" 7}, 8"Db": { 9"DbType": "SQLServer",10"ConnectionString": "Data..."11}12 }131415 //两个与配置Smtp和Db关联的类16 //SmtpSettings.cs17 class SmtpSettings18 {19public string Server { get; set; }20public string UserName { get; set; }21public string Password { get; set; }22 }2324 //DbSettings.cs25 class DbSettings26 {27public string DbType { get; set; }28public string ConnectionString { get; set; }29 }303132 //配置、选项绑定,并调用一个方法来读取配置33 //Program.cs34 ConfigurationBuilder configBuilder = new ConfigurationBuilder();35 configBuilder.AddJsonFile("appsettings.json", optional: false, reloadOnChange:true);36 IConfigurationRoot config = configBuilder.Build();3738 ServiceCollection services = new ServiceCollection();39 services.AddOptions()40.Configure<DbSettings>(e=>config.GetSection("Db").Bind(e))41.Configure<SmtpSettings>(e=>config.GetSection("Smtp").Bind(e));4243 services.AddTransient<ReadOptions>();4445 using (var sp = services.BuildServiceProvider())46 {47while (true)48{49using (var scope = sp.CreateScope())50{51var sp_scope = scope.ServiceProvider;52var readOptions = sp_scope.GetRequiredService<ReadOptions>();53readOptions.Read();54}55Console.WriteLine("修改appsettings后 , 按任意键读取最新的配置");56Console.ReadKey();57}58 }596061 //读取配置的方法类62 //ReadOptions.cs63 class ReadOptions64 {65private readonly IOptionsSnapshot<SmtpSettings> optSmtpSettings;66private readonly IOptionsSnapshot<DbSettings> optDbSettings;6768public ReadOptions(IOptionsSnapshot<SmtpSettings> optSmtpSettings, IOptionsSnapshot<DbSettings> optDbSettings)69{70this.optSmtpSettings = optSmtpSettings;71this.optDbSettings = optDbSettings;72}7374public void Read()75{76var smtp = optSmtpSettings.Value;77var db = optDbSettings.Value;78Console.WriteLine(smtp.UserName);79Console.WriteLine(db.DbType);80}81 }
推荐阅读
- 手机版的《我的世界》要怎么骑马和下马(我的世界手机版怎么才能骑马)
- 蔡徐坤跑男黄河篇同款鞋_蔡徐坤跑男同款鞋
- 29 《吐血整理》高级系列教程-吃透Fiddler抓包教程-Fiddler如何抓取Android7.0以上的Https包-终篇
- 完全看懂《冒死记录中国神秘事件》4部的高手进 冒死记录中国神秘事件
- C++ 函数重载解析策略
- 哪里可以看萧伯纳的《皮格马利翁》的中译 皮格马利翁中文剧本
- 《Vue3.x+TypeScript实践指南》已出版
- 《绝地求生》新手怎么玩(绝地求生新手打法教程)
- 带走一盏-“带走一盏渔火,让它温暖我的双眼……”选自《涛声依旧》,其歌词和意境借 ...
- 28 《吐血整理》高级系列教程-吃透Fiddler抓包教程-Fiddler如何抓取Android7.0以上的Https包-下篇