- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
配置系统可以读取到配置文件中的信息,那必然有某个地方可以将配置文件添加到配置系统中。之前的文章中讲到 ASP.NET Core 入口文件中,builder(WebApplicationBuilder 对象) 中有一个 Configuration 属性,这里就是我们扩展添加额外的配置的地方.
查看 Configuration 属性,可以看到是 ConfigurationManager 类型,而 ConfigurationManager 实现了 IConfigurationBuilder 接口.
IConfigurationBuilder 接口定义如下:
public interface IConfigurationBuilder{
// 存放用于该 Builder 的 Sources 列表中各个元素的共享字典
IDictionary<string, object> Properties { get; }
// 已注册的 IConfigurationSource 列表
IList<IConfigurationSource> Sources { get; }
// 将 IConfigurationSource 添加到 Sources 中
IConfigurationBuilder Add(IConfigurationSource source);
// 通过 Sources 构建配置提供程序实例,并创建 IConfigurationRoot 实例
IConfigurationRoot Build();
}
而它的实现类 ConfigurationBuilder 就是配置系统的入口.
public class ConfigurationBuilder : IConfigurationBuilder
{
public IList<IConfigurationSource> Sources { get; } = new List<IConfigurationSource>();
public IDictionary<string, object> Properties { get; } = new Dictionary<string, object>();
public IConfigurationBuilder Add(IConfigurationSource source)
{
if (source == null)
{
throw new ArgumentNullException(nameof(source));
}
Sources.Add(source);
return this;
}
public IConfigurationRoot Build()
{
var providers = new List<IConfigurationProvider>();
foreach (IConfigurationSource source in Sources)
{
IConfigurationProvider provider = source.Build(this);
providers.Add(provider);
}
return new ConfigurationRoot(providers);
}
}
当我们启动一个 ASP.NET Core应用的时候是创建并启动了一个Web主机,由 Web 主机来启动并管理我们的应用的生命周期,在这个过程中会默认添加一些配置提供程序,加载一些配置信息。这些操作就在以下代码中:
var builder = WebApplication.CreateBuilder(args);
.NET Core 框架下的主机除了适用于 Web 应用的 Web 主机之外,还有通用主机。若是在普通的控制台应用程序,想要通过主机启动应用,并使用配置系统可用以下方式:
(1) 添加 Microsoft.Extensions.Hosting Nuget 包 (2) 通过以下代码创建主机 。
using IHost host = Host.CreateDefaultBuilder(args).Build();
host.Run();
主机这块就先稍微了解以下,后面还会有专门的文章去介绍。除了通过主机的方式使用配置系统之外,我们也可以直接通过 ConfigurationBuilder 类构建,如下:
IConfiguration config = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.Build();
config.GetValue<string>("Logging:LogLevel:Default");
这里需要引入相应的Nuget包,例如使用 ConfigurationBinder 相关的扩展方法就要引入 Microsoft.Extensions.Configuration.Binder Nuget包,使用 Json 格式配置文件就要引入 Microsoft.Extensions.Configuration.Json Nuget包,该Nuget 包中包含 AddJsonFile 扩展方法,通过指定文件路径添加相应的配置文件到配置系统中.
配置文件多种多样,比较常用的都有 Json 、xml、ini、yaml 等多种,甚至配置信息不一定存储在文件之中。.NET Core配置系统对各种来源的配置信息进行了抽象,不同来源只要提供相应的配置提供程序即可,也就是我们上面在 IConfigurationRoot 接口中看到的 IConfigurationProvider 接口的实现类。配置提供程序内部对不同来源不同格式的配置信息进行加载、刷新,并提供统一的访问方式,也就是键值对,实际上所有的配置信息最终会以键值对的方式被读取到内存中的Dictionary对象中.
我们要添加不同类型不同来源的配置信息,只需要通过 IConfigurationBuilder 实现类对象添加不同的配置提供程序即可。在ASP.NET Core 应用之中,可以通过以下方式进行添加:
// 添加一个xml配置文件,并加入到配置系统中
var configirationFilePath = Path.Combine(Directory.GetCurrentDirectory(), "xxx.xml");
builder.Configuration.AddXmlFile(configirationFilePath);
也可以通过以下方式:
builder.WebHost.ConfigureAppConfiguration(builder =>
{
builder.AddXmlFile("");
});
这两种方式是一样的效果的,只不过具体的实现类不同,ConfigureAppConfiguration 可以将原有的配置提供程序情况,而 builder.Configuration 则不行,只能往集合后面继续添加.
参考文章:
ASP.NET Core 中的配置 | Microsoft Learn 配置 - .NET | Microsoft Learn 理解ASP.NET Core - 配置(Configuration) 。
ASP.NET Core 系列: 目录: ASP.NET Core 系列总结 上一篇: ASP.NET Core - 配置系统之配置读取 。
最后此篇关于ASP.NETCore-配置系统之配置添加的文章就讲到这里了,如果你想了解更多关于ASP.NETCore-配置系统之配置添加的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我创建了一个用户可以添加测试的字段。这一切运行顺利我只希望当用户点击(添加另一个测试)然后上一个(添加另一个测试)删除并且这个显示在新字段中。 所有运行良好的唯一问题是点击(添加另一个字段)之前添加另
String[] option = {"Adlawan", "Angeles", "Arreza", "Benenoso", "Bermas", "Brebant
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我正在努力将 jQuery 滚动功能添加到 nav-tab (Bootstrap 3)。我希望用户能够选择他们想要的选项卡,并在选项卡内容中有一个可以平滑滚动到 anchor 的链接。这是我的代码,可
我正在尝试在用户登录后再添加 2 个 ui 选项卡。首先,我尝试做一个之后。 $('#slideshow').tabs('remove', '4'); $("#slideshow ul li:last
我有一个包含选择元素的表单,我想通过选择添加和删除其中一些元素。这是html代码(这里也有jsfiddle http://jsfiddle.net/txhajy2w/):
正在写这个: view.backgroundColor = UIColor.white.withAlphaComponent(0.9) 等同于: view.backgroundColor = UICo
好的,如果其中有任何信息,我想将这些列添加到一起。所以说我有 账户 1 2 3 . 有 4 个帐户空间,但只有 3 个帐户。我如何创建 java 脚本来添加它。 最佳答案 Live Example H
我想知道是否有一种有效的预制算法来确定一组数字的和/差是否可以等于不同的数字。示例: 5、8、10、2,使用 + 或 - 等于 9。5 - 8 = -3 + 10 = 7 + 2 = 9 如果有一个预
我似乎有一个卡住的 git repo。它卡在所有基本的添加、提交命令上,git push 返回所有内容为最新的。 从其他帖子我已经完成了 git gc 和 git fsck/ 我认为基本的调试步骤是
我的 Oracle SQL 查询如下- Q1- select hca.account_number, hca.attribute3, SUM(rcl.extended_amou
我正在阅读 http://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingG
我正在尝试添加一个“加载更多”按钮并限制下面的结果,这样投资组合页面中就不会同时加载 1000 个内容,如下所示:http://typesetdesign.com/portfolio/ 我对 PHP
我遇到这个问题,我添加了 8 个文本框,它工作正常,但是当我添加更多文本框(如 16 个文本框)时,它不会添加最后一个文本框。有人遇到过这个问题吗?提前致谢。 Live Link: JAVASCRIP
add/remove clone first row default not delete 添加/删除克隆第一行默认不删除&并获取正确的SrNo(例如:添加3行并在看到问题后删除SrNo.2)
我编码this ,但删除按钮不起作用。我在控制台中没有任何错误.. var counter = 0; var dataList = document.getElementById('materi
我有一个类似数组的对象: [1:数组[10]、2:数组[2]、3:数组[2]、4:数组[2]、5:数组[3]、6:数组[1]] 我正在尝试删除前两个元素,执行一些操作,然后将它们再次插入到同一位置。
使用的 Delphi 版本:2007 你好, 我有一个 Tecord 数组 TInfo = Record Name : String; Price : Integer; end; var Info
我使用了基本的 gridster 代码,然后我声明了通过按钮添加和删除小部件的函数它工作正常但是当我将调整大小功能添加到上面的代码中时,它都不起作用(我的意思是调整大小,添加和删除小部件) 我的js代
title 323 323 323 title 323 323 323 title 323 323 323 JS $(document).keydown(function(e){
我是一名优秀的程序员,十分优秀!