c# asp.net core 6 配置文件与ServiceCollection的使用
一、引包
1.Microsoft.Extensions.Configuration
2.Microsoft.Extensions.Configuration.Json
3.Microsoft.Extensions.Configuration.Binder
4.Microsoft.Extensions.DependencyInjection
5.Microsoft.Extensions.Options
二、创建配置文件
创建一个json文件,并且复制到输出目录设置成如果较新复制
{ "data":"21", "db": { "ConnectionString": "链接字符串", "DbType": "mysql" } }
三、配置文件(ConfigurationBuilder类)的基本使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | ConfigurationBuilder configBuilder = new ConfigurationBuilder(); //先加载配置文件 //path=文件路径;optional=true文件不存在不报错,false文件不存在报错;reloadOnChange文件修改了是否重新加载 configBuilder.AddJsonFile(path: "config.json" ,optional: true , reloadOnChange: true ); IConfigurationRoot root = configBuilder.Build(); { var str = root[ "data" ]; Console.WriteLine(str); } { var str = root.GetSection( "db:DbType" ).Value; Console.WriteLine(str); } //说明:索引也可以使用GetSection当中的JsonPath写法, |
四、创建实体类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | /// <summary> ///配置文件的依赖注入不能直接引用实体类, ///需要使用: ///IOptions<Demo>说明:重启后更改配置 ///IOptionsMonitor<Demo>说明:暂时没明白 ///IOptionsSnapshot<Demo>说明:更改后立即生效 /// </summary> internal class Demo { IOptionsSnapshot<DbSettings> options; public Demo(IOptionsSnapshot<DbSettings> options) { this .options = options; } public void read() { Console.WriteLine( "数据库" +options.CurrentValue.DbType); } } |
五、结合ServiceCollection读取配置文件。
ConfigurationBuilder configBuilder = new ConfigurationBuilder(); configBuilder.AddJsonFile(path:"config.json",optional: true, reloadOnChange:true); IConfigurationRoot root = configBuilder.Build(); ServiceCollection services = new ServiceCollection();
//实体类绑定配置文件json对象 services.AddOptions().Configure<DbSettings>(r => root.GetSection("db").Bind(r)); services.AddTransient<Demo>(); using(var sp = services.BuildServiceProvider()) { while (true) { using(var p = sp.CreateAsyncScope()) { var demo = p.ServiceProvider.GetService<Demo>(); demo!.read(); } Console.Write("读取成功"); Console.ReadKey(); } }
成功更改。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通