配置文件概述
程序配置文件一般用于配置程序通用的常量信息,通常包括数据库连接信息,账号设置等信息
dotnetcore默认使用json文件(appsettings.json)作为程序的配置文件。Json文件相对原来的xml文件,文件变小了,而且格式化的情况下Json文件也是很好阅读的。
appsettings.json
1 { 2 "ConnectionStrings": { 3 "SystemDbConnection": "Server=127.0.0.1;DataBase=SystemDb;User Id=sa;password=123456", 4 "SystemDbConnection_ReadOnly": "Server=127.0.0.1;DataBase=SystemDb;User Id=sa;password=123456" 5 }, 6 "MarketAccountInfo": { 7 "AccountId": "8783", 8 "Appkey": "23786FEE", 9 "Secretkey": "23786FEE==" 10 }, 11 12 "AllowedHosts": "*" 13 }
其文件属性默认是不复制的,生成操作为内容,在发布时会复制到发布路径下的。
配置文件的读取
程序startup类中已经自动加载配置信息 Configuration属性就是
public IConfiguration Configuration { get; }
一般当我们在调试程序时,配置文件不会复制到调试的目录,调试程序读取的是程序目录的配置文件(appsetting.json)
读取配置文件的内容也比较简单
1 /// <summary> 2 /// 初始化配置信息 3 /// </summary> 4 private void InitConfig() 5 { 6 string dbConnectionString = Configuration.GetConnectionString("SystemDbConnection"); 7 string dbReadonlyConnectionString = Configuration["ConnectionStrings:SystemDbConnection_ReadOnly"]; 8 MarketAccount account = Configuration.GetSection("MarketAccountInfo").Get<MarketAccount>(); 9 10 }
附--MarketAccount类
1 /// <summary> 2 /// 市场账号 3 /// </summary> 4 public class MarketAccount 5 { 6 public string AccountId { get; set; } 7 public string Appkey { get; set; } 8 public string Secretkey { get; set; } 9 }
我们也可以自定义类读取配置文件,作为一个全局通用类。(这时最好将配置文件的属性设为【始终复制】或者【如果较新则复制】,这样在调试时才能读取到配置)
1 using Microsoft.Extensions.Configuration; 2 using System; 3 using System.Collections.Generic; 4 using System.Linq; 5 using System.Threading.Tasks; 6 7 namespace NetCoreExample 8 { 9 /// <summary> 10 /// 配置设置 11 /// </summary> 12 public class ConfigSetting 13 { 14 private static IConfiguration root = new ConfigurationBuilder().SetBasePath(AppContext.BaseDirectory).AddJsonFile("appsettings.json").Build(); 15 /// <summary> 16 /// 获取DB连接字符串 17 /// </summary> 18 /// <param name="name"></param> 19 /// <returns></returns> 20 public static string GetConnectionString(string name) 21 { 22 return root.GetConnectionString(name); 23 } 24 /// <summary> 25 /// 获取账号信息 26 /// </summary> 27 /// <returns></returns> 28 public static MarketAccount GetMarketAccount() 29 { 30 return root.GetSection("MarketAccountInfo").Get<MarketAccount>(); 31 } 32 33 }
在Startup类中加载为程序默认帮忙加载了配置文件,我们可以在其中将配置信息初始化到程序中(例如某个固定类)作为全局信息。
自定义加载不一定加载appsetting.json,而且比较灵活,如非必要,觉得还是在startup中加载比较好。避免多次加载。
当然配置文件也无需一定要经过Configuration进行读取,也可以定义读取,例如直接经过IO读取json文件,在将Json转成对应的实体或者属性。不过这样的代码就比较生硬了。