首页 > 编程语言 >ASP.NET Core - 配置系统之配置添加

ASP.NET Core - 配置系统之配置添加

时间:2023-03-10 10:47:22浏览次数:63  
标签:Core ASP 配置 IConfigurationBuilder source 添加 NET

2. 配置添加

配置系统可以读取到配置文件中的信息,那必然有某个地方可以将配置文件添加到配置系统中。之前的文章中讲到 ASP.NET Core 入口文件中,builder(WebApplicationBuilder 对象) 中有一个 Configuration 属性,这里就是我们扩展添加额外的配置的地方。

查看 Configuration 属性,可以看到是 ConfigurationManager 类型,而 ConfigurationManager 实现了 IConfigurationBuilder 接口。

image

image

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)

  转 https://www.cnblogs.com/wewant/p/17110740.html

标签:Core,ASP,配置,IConfigurationBuilder,source,添加,NET
From: https://www.cnblogs.com/wl-blog/p/17202558.html

相关文章

  • 如何在 Net6.0 中对 WebAPI 进行 JWT 认证和授权
    一、简介我们做微服务开发,或者说做分布式开发,有一项技术我们是避不开的,那就是WebAPI,在Net6.0中,有两类WebAPI,一类是极简WebAPI,它砍掉了很多冗余的东西,更纯粹的是......
  • ASP.NET Core - 配置系统之配置读取
    一个应用要运行起来,往往需要读取很多的预设好的配置信息,根据约定好的信息或方式执行一定的行为。配置的本质就是软件运行的参数,在一个软件实现中需要的参数非常多,如果我们......
  • 使用ControlNet 控制 Stable Diffusion
    本文将要介绍整合HuggingFace的diffusers包和ControlNet调节生成文本到图像,可以更好地控制文本到图像的生成ControlNet是一种通过添加额外条件来控制扩散模型的神经网络......
  • .netcore全局异常处理
    一、背景某天,应用程序进程无缘无故退出,也就是我们通常说的崩溃。通常情况下,windows事件会记录一条消息。但是有时候,我们发现这样的信息,对于查找问题,还是远远不够的,因为它......
  • .NET静态代码织入——肉夹馍(Rougamo) 发布1.4.0
    肉夹馍(https://github.com/inversionhourglass/Rougamo)通过静态代码织入方式实现AOP的组件,其主要特点是在编译时完成AOP代码织入,相比动态代理可以减少应用启动的初始化时......
  • API发布与部署-- .NET WebAPI 篇
    API发布-- .NET  WebAPI 篇1:准备工作:设置数据库链接字符串,打开一个正常的项目:首先注意所有的appsettings.json文件,包括生产环境配置子文件,注意里面的链......
  • ASP.NET Core 文件上传
    以下是将上传的图片保存在本地的示例代码:1、在前端,使用HTML表单元素和POST方法将文件上传到后端:<formmethod="post"enctype="multipart/form-data"action="/upload">......
  • DOTNET CORE DATETIME在LINUX与WINDOWS时间不一致
    .netcore项目,部署到CentOS上的时候,发现DateTime.Now获取的时间与Windows不一致,主要是时区不一致。staticvoidMain(string[]args){Console.WriteLine(DateTime.......
  • AspNet Core: Jwt身份认证
    目录AspNetCore:Jwt身份认证资源服务器创建项目依赖包添加APIProgram认证服务器创建项目依赖包AspNetCore:Jwt身份认证资源服务器创建项目新建一个“AspNetCoreWe......
  • .netcore 静态文件地址访问
    首先在StartUp.cs文件里面注册管道如:需要在网站里面的files的文件对外访问app.UseStaticFiles();app.UseFileServer(newFileServerOptions{......