开发者社区> 喵叔哟> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

.NET6新东西--ConfigurationManager

简介: .NET6新东西--ConfigurationManager
+关注继续查看

.NET6于2021年11月9日凌晨0点30分与VS2022一同发布,从今天开始我将带领大家来看一下.NET6新引入的内容。今天我们先来看一下.NET6中的ConfigurationManager。


这里所说的ConfigurationManager并不是.NET Framework中的静态类ConfigurationManager,而是.NET6为Minimal API引入的一个新内容,它位于Microsoft.Extensions.Configuration中。简单的说.NET6中的ConfigurationManager就是.NET Framework 中 ConfigurationBuilder和ConfigurationRoot的结合体,我们在ConfigurationManager的源代码中就可以看出来:

/// <summary>
    /// Configuration is mutable configuration object. It is both an <see cref="IConfigurationBuilder"/> and an <see cref="IConfigurationRoot"/>.
    /// As sources are added, it updates its current view of configuration. Once Build is called, configuration is frozen.
    /// </summary>
    public sealed class ConfigurationManager : IConfigurationBuilder, IConfigurationRoot, IDisposable
    {
        private readonly ConfigurationSources _sources;
        private readonly ConfigurationBuilderProperties _properties;

        private readonly object _providerLock = new();
        private readonly List<IConfigurationProvider> _providers = new();
        private readonly List<IDisposable> _changeTokenRegistrations = new();
        private ConfigurationReloadToken _changeToken = new();
        //more code
        //....
         // Don't rebuild and reload all providers in the common case when a source is simply added to the IList.
        private void AddSource(IConfigurationSource source)
        {
            lock (_providerLock)
            {
                var provider = source.Build(this);
                _providers.Add(provider);

                provider.Load();
                _changeTokenRegistrations.Add(ChangeToken.OnChange(() => provider.GetReloadToken(), () => RaiseChanged()));
            }

            RaiseChanged();
        }
            //more code
            //.....
    }

从上面的源码中我们可以看出来ConfigurationManager在添加IConfigurationSource的时候会注册IConfigurationProvider。每添加一个新的配置源时都会去创建一个IConfigurationProvider,并去加载配置数据和注册配置更新事件。因此才能在添加了source之后拿到Configuration中的配置。


就目前来说,ConfigurationManager主要用在Minimal API中,但是我们也可以在其他类型的项目中直接使用。而且.NET6为我们做了兼容,即使在.NET6中使用原来的IConfigurationBuilder也没有问题。但是这里有个问题,虽说使用ConfigurationManager会更加简单(对于编写代码来说),不用像以前那样先声明一个IConfigurationBuilder对象,并注册好后再创建一个IConfiguration对象,但性能会差一些,注册的配置源越多就越明显。因为每次ConfigurationManager注册配置源都会区创建并注册IConfigurationProvider,但以前的方式则是在最后Build的时候才去创建。这里建议根据实际项目情况使用。


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
SAP Cloud for Customer Business Configuration的权限控制
SAP Cloud for Customer Business Configuration的权限控制
54 0
在类库中无法使用ConfigurationManager
需要先引用DLL文件: C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.configuration.dll 然后才可以使用 System.
533 0
点点滴滴-ConfigurationManager.AppSettings
在写程序的配置文件,里面添加了几个配置,下面是appSettings节点的设置 但是通过  m_TemplatePath = ConfigurationManager.AppSettings["Templates"];却获的始终为null,经确定自己的这个写法没有错误,名称也没问题, 最后发现将appSettings这个节点放在configuration节点的最后,就可以了。
866 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
FLowFuzz A Framework
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载