目的:1、直接获取配置参数,无需其他操作;2、获取参数的一部分返回一个实体
配置文件(appsettings.json)结构:
{
工 "a":1,
"b":{
"c":3
},
"d":[4,5]
}
第一步:封装一个类(ToolConfig.cs)专门用于读取配置参数,且任意到处在项目中使用:
public class ToolConfig{
public int a{set;get;}
public int[] d{set;get;}
public b b{set;get;}
//加载配置文件
static void initConfig(){
var fileName = "appsettings.json";
var directory = AppContext.BaseDirectory;
directory = directory.Replace("\\", "/");
var filePath = $"{directory}/{fileName}";
if (!File.Exists(filePath))
{
var length = directory.IndexOf("/bin");
filePath = $"{directory.Substring(0, length)}/{fileName}";
}
var config = new ConfigurationBuilder()
.SetBasePath(Environment.CurrentDirectory)
.Add(new JsonConfigurationSource
{
Path = "appsettings.json",
Optional = true,
ReloadOnChange = true
})
.Build();
Configuration = config;
}
//获取参数一部分并转为实体
public static b GetB
{
get
{
return Get<RedisParas>("a:b");
}
}
//获取整型
public static int GetInt(string key, string defaultValue = "")
{
return Convert.ToInt32(Configuration[key] ?? defaultValue);
}
//获取字符串
public static string GetStr(string key, string defaultValue = "")
{
return Configuration[key] ?? defaultValue;
}
//获取简单参数:整形、布尔、字符串
public static T GetValue<T>(string key)
{
return Configuration.GetValue<T>(key);
}
//获取数组/复杂对象
public static T Get<T>(string key) where T : class, new()
{
return Configuration.GetSection(key).Get<T>();
}
//其他类型根据需要自己写吧
}
//对应参数中的复杂类型
public class b{
public int c{get;set;}
}
第二步:Startup.cs中实例化配置文件类
public Startup(IConfiguration configuration)
{
//初始配置文件
ToolConfig tc = new ToolConfig();
}
演示使用:
//获取参数 a
ToolConfig.GetValue<int>("a")
ToolConfig.GetInt("a")
//获取参数 b
ToolConfig.GetB
//获取参数 d
ToolConfig.Configuration.GetSection("d").Get<int[]>();