其他分享
首页 > 其他分享> > 细聊.NET6 ConfigurationManager的实现

细聊.NET6 ConfigurationManager的实现

作者:互联网

前言

友情提示:建议阅读本文之前先了解下.Net Core配置体系相关,也可以参考本人之前的文章《.Net Core Configuration源码探究 》然后对.Net Core的Configuration体系有一定的了解,使得理解起来更清晰。

    在.Net6中关于配置相关多出一个关于配置相关的类ConfigurationManager,如果大概了解过Minimal API中的WebApplicationBuilder类相信你肯定发现了,在Minimal API中的配置相关属性Configuration正是ConfigurationManager的对象。ConfigurationManager本身并没有引入新的技术,也不是一个体系,只是在原来的基础上进行了进一步的封装,使得配置体系有了一个新的外观操作,暂且可以理解为新瓶装旧酒。本文我们就来了解下ConfigurationManager类,来看下微软为何在.Net6中会引入这么一个新的操作。

使用方式

关于.Net6中ConfigurationManager的使用方式,我们先通过简单的示例演示一下

ConfigurationManager configurationManager = new();
configurationManager.AddJsonFile("appsettings.json",true,reloadOnChange:true);
string serviceName = configurationManager["ServiceName"];
Console.WriteLine(serviceName);

当然,关于获取值得其他方式。比如GetSection、GetChildren相关方法还是可以继续使用的,或者使用Binder扩展包相关的Get<string>()GetValue<NacosOptions>("nacos")类似的方法也照样可以使用。那它和之前的.Net Core上的配置使用起来有什么不一样呢,我们看一下之前配置相关的使用方式,如下所示

IConfigurationBuilder configurationBuilder = new ConfigurationBuilder().AddJsonFile("appsettings.json");
IConfiguration configuration = configurationBuilder.Build();
string serviceName = configuration["ServiceName"];
Console.WriteLine(serviceName);

这里需要注意的是,如果你是使用ConfigurationManager或者是IConfiguration封装的Helper类相关,并没有通过框架体系默认注入的时候,一定要注意将其设置为单例模式。其实这个很好理解,先不说每次用的时候都去实例化带来的内存CPU啥的三高问题。读取配置文件本质不就是把数据读到内存中吗?内存中有一份缓存这就好了,每次都去重新实例去读本身就是一种不规范的方式。许多时候如果你实在不知道该定义成什么样的生命周期,可以参考微软的实现方式,以ConfigurationManager为例,我们可以参考WebApplicationBuilder类中对ConfigurationManager注册的生命周期[点击查看源码

标签:IConfigurationBuilder,配置,providers,ConfigurationManager,source,new,NET6,细聊
来源: https://www.cnblogs.com/wucy/p/15723348.html