.Net Core3.0 配置Configuration

 准备

.NET core和.NET项目配置上有了很大的改变,支持的也更加丰富了比如命令行,环境变量,内存中.NET对象,设置文件等等。.NET项目我们常常把配置信息放到webConfig 或者appConfig中。配置相关的源码https://github.com/aspnet/Extensions;如果打开源码项目 如果遇到以下错误,未遇到直接跳过。

640?wx_fmt=png

错误提示: error : The project file cannot be opened by the project system, because it is missing some critical imports or the referenced SDK cannot be found. Detailed Information:

解决办法:查看本地安装的sdk 与 global.json中制定的版本是否一致:然后修改即可

640?wx_fmt=png

开始

新建个Asp.net Core web应用程序系统默认创建了appsettings.json ;在应用启动生成主机时调用CreateDefaultBuilder方法,默认会加载 appsettings.json。代码如下:
 public static IHostBuilder CreateDefaultBuilder(string[] args)	
        {	
            var builder = new HostBuilder();	

	
            builder.UseContentRoot(Directory.GetCurrentDirectory());	
            builder.ConfigureHostConfiguration(config =>	
            {	
                config.AddEnvironmentVariables(prefix: "DOTNET_");	
                if (args != null)	
                {	
                    config.AddCommandLine(args);	
                }	
            });	

	
            builder.ConfigureAppConfiguration((hostingContext, config) =>	
            {	
                var env = hostingContext.HostingEnvironment;	

	
                config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)	
                      .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);	

	
                if (env.IsDevelopment() && !string.IsNullOrEmpty(env.ApplicationName))	
                {	
                    var appAssembly = Assembly.Load(new AssemblyName(env.ApplicationName));	
                    if (appAssembly != null)	
                    {	
                        config.AddUserSecrets(appAssembly, optional: true);	
                    }	
                }
利用 GetValue,GetSection,GetChildren读取appsettings.json 键值对 。我们打开appsettings.json文件:

640?wx_fmt=png

将文件读入配置时,会创建一下唯一的分层健来保存配置值:

  • Logging:LogLevel:Default

  • Logging:LogLevel:System

  • Logging:LogLevel:Microsoft

  • Logging:LogLevel:Microsoft.Hosting.Lifetime

  • AllowedHosts

 var jsonValue = $"AllowedHosts:{_config["AllowedHosts"]}"+ "\r\n";	
            jsonValue += "Logging:LogLevel:Default:" + _config.GetValue<string>("Logging:LogLevel:Default")+ "\r\n";	

	
            //GetSection 返回IConfigurationSection;如果未匹配到 返回null	
            //jsonValue += "---" + _config.GetSection("Logging:LogLevel:System");	
            jsonValue += "Logging:LogLevel:System:" + _config.GetSection("Logging:LogLevel:System").Value+ "\r\n\n";	
          	
            var logSection = _config.GetSection("Logging:LogLevel");	
            var configurationSections = logSection.GetChildren();	
            foreach (var sections in configurationSections) 	
            {	
                jsonValue += $"{sections.Path}:{sections.Value}";	
                jsonValue += "\r\n";	
            }	
            jsonValue += "\r\n";

输出:

640?wx_fmt=png 

配置指定json文件绑定至类

新建一个json文件-AAAppSettings.json
{	
  "AA": {	
    "RabbitMqHostUrl": "rabbitmq://localhost:5672",	
    "RabbitMqHostName": "localhost",	
    "RabbitMqUserName": "admin",	
    "RabbitMqPassword": "123"	
  }	
}	

使用 ConfigureAppConfiguratio n方法 配 置 指定的json文件
public static IHostBuilder CreateHostBuilder(string[] args) =>	
            Host.CreateDefaultBuilder(args)	
            .ConfigureAppConfiguration((hostingContext, config) =>	
            {	
                config.SetBasePath(Directory.GetCurrentDirectory());	
                config.AddJsonFile("AAAppSettings.json", optional: true, reloadOnChange: true);	
            })

使用bind方法绑定到新建的类上如:   

 public partial class AAConfig	
    {	
        public string RabbitMqHostUrl { get; set; }	
        public string RabbitMqHostName { get; set; }	
        public string RabbitMqUserName { get; set; }	
        public string RabbitMqPassword { get; set; }	
    }

    

var aaConfig = new AAConfig();	
_config.GetSection("AA").Bind(aaConfig);	
jsonValue += aaConfig.RabbitMqHostUrl + "\r\n";	
jsonValue += aaConfig.RabbitMqHostName + "\r\n";	
jsonValue += aaConfig.RabbitMqUserName + "\r\n";	
jsonValue += aaConfig.RabbitMqPassword + "\r\n";	
return jsonValue;

运行输出:

640?wx_fmt=png

640?wx_fmt=jpeg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值