.NET CORE中的配置系统
1.在.NET CORE中读取json文件
需要用到的NuGet包:Microsoft.Extensions.Configuration 、Microsoft.Extensions.Configuration.Json
2.读取配置的方法
ConfigurationBuilder configBuilder = new ConfigurationBuilder();
configBuilder.AddJsonFile(path:"json1.json", optional:true,reloadOnChange:true)//绑定json 文件 optionl 表示文件是否可选,reloadOnChange文件发生修改是否重新加载配置
var config = configBuilder.Build(); //构建
//读取json文件
Console.WriteLine(config.GetValue
Console.WriteLine(config.GetSection("name:age").Value);
Console.WriteLine(config["name:age"]);
//将json文件转化成实体类进行读取
var pro= config.GetSection("proxy").Get
2.使用DI进行配置读取json文件
需要安装的NuGe包:Microsoft.Extensions.Options 、Microsoft.Extensions.Configuration.Binder、Microsoft.Extensions.Configuration 、Microsoft.Extensions.Configuration.Json
读取配置时 DI要声明IOptions
//注册options AddJsonFileConfig
services.AddJsonFileConfig();
services.AddOptions().Configure<ServerProxy>(e => config.GetSection("proxy").Bind(e));
public class JsonFileService : IConfigService
{
private readonly IOptionsSnapshot<ServerProxy> optionConfig;
public JsonFileService(IOptionsSnapshot<ServerProxy> optionConfig)
{
this.optionConfig = optionConfig;
}
public string GetValue()
{
//Console.WriteLine(optionConfig.Value.Address);
//Console.WriteLine(optionConfig.Value.Port);
return optionConfig.Value.Address;
}
}
//进行调用
using (ServiceProvider sp = services.BuildServiceProvider())
{
while (true)
{
//var sss= sp.GetService<IConfigService>();//在同一个scope中修改文件不会立即生效
using (var c = sp.CreateScope())
{
var sss = c.ServiceProvider.GetService<IConfigService>();
Console.WriteLine(sss.GetValue() + "*********1");
Console.ReadKey();
Console.WriteLine(sss.GetValue() + "*********2");
}
Console.ReadKey();
}
}
3.从命令行参数中读取配置信息
需要用到的NuGet包 Microsoft.Extensions.Configuration.CommandLine
//注册服务
configBuilder.AddCommandLine(args);
//注释掉json文件的配置
//configBuilder.AddJsonFile(path:"json1.json", optional:true,reloadOnChange:true);//绑定json 文件 设置可选项
//配置绑定实体
services.AddOptions().Configure
public class CmdService : IConfigService
{
private readonly IOptionsSnapshot<ServerProxy> optionConfig;
public CmdService(IOptionsSnapshot<ServerProxy> optionConfig)
{
this.optionConfig = optionConfig;
}
public string GetValue()
{
//Console.WriteLine(optionConfig.Value.Address);
//Console.WriteLine(optionConfig.Value.Port);
return optionConfig.Value.Address;
}
}
//进行调用
using (ServiceProvider sp = services.BuildServiceProvider())
{
while (true)
{
//var sss= sp.GetService<IConfigService>();//在同一个scope中修改文件不会立即生效
using (var c = sp.CreateScope())
{
var sss = c.ServiceProvider.GetService<IConfigService>();
Console.WriteLine(sss.GetValue() + "*********1");
Console.ReadKey();
Console.WriteLine(sss.GetValue() + "*********2");
}
Console.ReadKey();
}
}
//命令行传参要对参数进行扁平化处理
//通过命令行启动 传入参数dotnet ConsoleAppMailSender.dll proxy:address=10000 proxy:port=3000
//也可以在项目-->属性-->调试-->常规-->命令行参数 进行配置
4.从环境变量中读取配置
需要安装的NuGet包:Microsoft.Extensions.Configuration.EnvironmentVariables
configBuilder.AddEnvironmentVariables();//从VS环境变量中读取配置信息(避免修改系统环境变量导致系统出问题) 项目属性--》调试--》环境变量 也是扁平化配置
services.AddOptions().Configure
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~