重新整理 .net core 实践篇—————配置系统之军令状[七](配置文件)

前言

介绍一下配置系统中的配置文件,很多服务的配置都写在配置文件中,也是配置系统的大头。

正文

在asp .net core 提供了下面几种配置文件格式的读取方式。

Microsoft.extensions.configuration.Ini

Microsoft.extensions.configuration.Json

Microsoft.extensions.configuration.NewtonsoftJson

Microsoft.extensions.configuration.Xml

Microsoft.extensions.configuration.UserSecrets

这里演示json的,因为大多数的我们用的还是json。

那么这里就要引入:Microsoft.extensions.configuration.Json 这个库。

在根目录在创建appsettings.json 这个文件:

里面如下:

{
  "key1": "value1",
  "key2": "value2"
}

代码:

IConfigurationBuilder builder = new ConfigurationBuilder();
builder.AddJsonFile(System.AppDomain.CurrentDomain.BaseDirectory + "/appsettings.json");
var configurationRoot = builder.Build();

Console.WriteLine(configurationRoot["key1"]);
Console.WriteLine(configurationRoot["key2"]);

结果:

如果说文件找不到,那么可能是下面这种情况,要设置复制过去。

如果我们这个appsettings.json 不存在的话,那么会报错。

当然我们可以设置如果没有这个appsettings.json 也不报错。

我添加了一个不存在的配置文件appsettings_dev.json,那么会报错。

IConfigurationBuilder builder = new ConfigurationBuilder();
builder.AddJsonFile(System.AppDomain.CurrentDomain.BaseDirectory + "/appsettings.json");
builder.AddJsonFile(System.AppDomain.CurrentDomain.BaseDirectory + "/appsettings_dev.json");
var configurationRoot = builder.Build();

Console.WriteLine(configurationRoot["key1"]);
Console.WriteLine(configurationRoot["key2"]);

报错如下:

但是如果设置optional,那么是可选的,没有的话也不会报错。

 builder.AddJsonFile(System.AppDomain.CurrentDomain.BaseDirectory + "/appsettings_dev.json",optional:true);

这里面同样AddJsonFile有一个属性reloadOnChange,这个属性设置是否当我们配置文件修改的时候,是否重新加载这个文件,默认为true。

IConfigurationBuilder builder = new ConfigurationBuilder();
builder.AddJsonFile(System.AppDomain.CurrentDomain.BaseDirectory + "/appsettings.json",optional:false,reloadOnChange: true);
var configurationRoot = builder.Build();

Console.WriteLine(configurationRoot["key1"]);
Console.WriteLine(configurationRoot["key2"]);

Console.ReadKey();

Console.WriteLine(configurationRoot["key1"]);
Console.WriteLine(configurationRoot["key2"]);
Console.ReadKey();

修改后,按下enter键。

修改内容如下:

{
  "key1": "value1_change",
  "key2": "value2_change"
}

这里只演示了json文件,其实文件也一样。

因为在前面中分析过ConfigurationRoot 这个类,知道它的索引,后面添加的文件配置会覆盖前面的,这里再贴一下。

public string this[string key]
{
	get
	{
		for (int i = _providers.Count - 1; i >= 0; i--)
		{
			IConfigurationProvider provider = _providers[i];

			if (provider.TryGet(key, out string value))
			{
				return value;
			}
		}

		return null;
	}
	set
	{
		if (!_providers.Any())
		{
			throw new InvalidOperationException(SR.Error_NoSources);
		}

		foreach (IConfigurationProvider provider in _providers)
		{
			provider.Set(key, value);
		}
	}
}

是倒着获取的。

下一节 配置系统之间谍[八](文件监听)

以上只是个人整理,如有错误,望请指出,谢谢。

posted @   敖毛毛  阅读(636)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
历史上的今天:
2020-06-01 Android studio 提示“android qemu-system-i386.exe停止工作”
2020-06-01 android虚拟机硬件加速问题
2020-06-01 c# 优化代码的一些规则——什么情况下应该使用new[七]
2020-06-01 c# 优化代码的一些规则——判断null值得不同写法[六]
2020-06-01 c# 优化代码的一些规则——用委托表示回调[五]
点击右上角即可分享
微信分享提示