前因:最近在阅读.net core源码,发现关于Configuration介绍的文档都比较多,但是都比较杂乱,(微软文档太官方),所以写下一些自己的感想

主要通过三种使用情况来介绍

  • Web应用程序使用
  • 控制台应用程序使用
  • 库类使用

需要注意的点,假如我同时配置多个配置文件,程序使用的是最后加载的配置文件

Web应用程序使用

首先简述一下web主机创建配置对象的过程


public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostContext, confBuilder) =>
{
var env = hostContext.HostingEnvironment;
confBuilder.AddJsonFile(path: "appSettings.json", optional: true, reloadOnChange: true);
confBuilder.AddJsonFile(path: $"appSettings.{env.EnvironmentName}.json",optional:true,reloadOnChange:true);
confBuilder.AddJsonFile(path: "importsettings.json", optional: true, reloadOnChange: true);
confBuilder.AddEnvironmentVariables();
confBuilder.AddCommandLine(args);
confBuilder.AddUserSecrets<Startup>();
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}

ConfigureAppConfiguration((hostContext, confBuilder)

在这句话中,告诉程序需要使用的主机上下文和配置生成器,这个是一个基本的构建起,可以对其进行修改,直至完成CreateHostBuilder为止


var env = hostContext.HostingEnvironment;

获取当前程序的运行环境,比如dev,test,product环境,可以供我们使用不同的配置文件


confBuilder.AddJsonFile(path: "appSettings.json", optional: true, reloadOnChange: true);
confBuilder.AddJsonFile(path: $"appSettings.{env.EnvironmentName}.json",optional:true,reloadOnChange:true);
confBuilder.AddJsonFile(path: "importsettings.json", optional: true, reloadOnChange: true);

这里其实就是指配置几个不同的配置文件


confBuilder.AddEnvironmentVariables();
confBuilder.AddCommandLine(args);

这两行则是大多数应用程序通用的(当然不需要也不影响我们程序的使用)


confBuilder.AddUserSecrets<Startup>();

这句话其实是一种安全配置,可以通过配置对象访问Azure的加密存储的用户机密对象的安全存储,第二个是因为启用了Azure,可以安全的访问云配置,Secrets子系统可以在本地运行,也可以基于云运行

Web应用程序其他一些重要功能,比如依赖注入则是在StartUp.cs文件中体现(当然,如果想,startUp文件也不是必要的)

控制台应用程序/类库


static void Main(string[] args)
{
IConfiguration configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile("importsettings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
.AddCommandLine(args)
.Build();
}

public StarChartDataHandler() : this(new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile("importsettings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
.Build())
{ }
public StarChartDataHandler(IConfiguration config)
{
if (config == null)
{
config = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true
.AddJsonFile("importsettings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();
}
_configuration = config;
ConfigurationSection userSettings = _configuration.GetSection("userSettings") as ConfigurationSection;
var defaultStarChartFile = userSettings["DefaultStarChartFile"];
var starChartFile = userSettings["StarChartFile"];
var defaultStarChartSchema = userSettings["DefaultStarChartSchema"];
var starChartSchema = userSettings["StarChartSchema"];
var starChartDirectory = userSettings["Directory"];
List<string> fileList = userSettings.GetSection("StarChartFileList").Get<List<string>>();
...
}

控制台应用程序和类库都是需要构造Configuration Builder对象,而不是使用Host Builder完成,另外一个重要的问题是:在这里我们没有上下文,所以没有办法直接获取环境的上下文,所以在下面就没有介绍,但是,凡事不是必须的,这个问题是有解决答案的,如果大家需要,可以在下方留言,

如有哪里讲得不是很明白或是有错误,欢迎指正

如您喜欢的话不妨点个赞收藏一下吧

.net core Configuration对象的更多相关文章

  1. IOS开发之—— Core Foundation对象与OC对象相对转换的问题

    对ARC盲目依赖的同学: 1过度使用block后,无法解决循环引用问题 2遇到底层Core Foundation对象,需要自己手工管理它们的引用计数时,显得一筹莫展 first:对于底层Core Fo ...

  2. Configuration对象

    Configuration对象 Hibernate的持久化操作离不开SessionFactory对象,使用该对象的openSession()方法可以打开Session对象.而SessionFactor ...

  3. 无法为请求的 Configuration 对象创建配置文件 错误原因

    Configuration config = WebConfigurationManager.OpenWebConfiguration("~"); 无法为请求的 Configura ...

  4. 使用Core Animation对象来实现动画

    转载保留原文地址:http://blog.csdn.net/kqjob/article/details/10417461,转载的 在iOS中如果使用普通的动画则可以使用UIKit提供的动画方式来实现, ...

  5. 你可能不知道的.Net Core Configuration

    目录 执行原理 环境变量 Spring Cloud Config Server 挂卷Volume Config Server vs Volume 执行原理 1. 配置读取顺序:与代码先后顺序一致. p ...

  6. mybatis源码解读(二)——构建Configuration对象

    Configuration 对象保存了所有mybatis的配置信息,主要包括: ①. mybatis-configuration.xml 基础配置文件 ②. mapper.xml 映射器配置文件 1. ...

  7. C#/ASP.NET应用程序配置文件app.config/web.config的增、删、改操作,无法为请求的 Configuration 对象创建配置文件。

    应用程序配置文件,对于asp.net是 web.config,对于WINFORM程序是 App.Config(ExeName.exe.config). 配置文件,对于程序本身来说,就是基础和依据,其本 ...

  8. 5 -- Hibernate的基本用法 --4 1 创建Configuration对象

    org.hibernate.cfg.Configuration实例代表了应用程序到SQL数据库的配置信息,Configuration对象提供了一个buildSessionFactory()方法,该方法 ...

  9. Mybatis 创建Configuration对象

    Mybatis  创建Configuration对象是在项目启动时就创建了. 具体创建流程为: https://blog.csdn.net/wolfcode_cn/article/details/80 ...

随机推荐

  1. SpringCloudAlibaba-服务容错Sentinel(入门)

    一:高并发带来的问题? 在微服务架构中,我们将业务拆分成一个个的服务,服务与服务之间可以相互调用,但是由于网络原因或者自身的原因,服务并不能保证服务的100%可用,如果单个服务出现问题,调用这个服务就 ...

  2. 百度小程序中swan.setPageInfo的用法

    现在百度智能小程序是百度最新的流量入口,现在很多做SEO优化.小程序开发的企业为了获取更多的流量不得不开发了,很多的技术人员不了解百度小程序的标题和关键词.描述等信息不知道在哪里设置. 以下是小编给你 ...

  3. C#设计模式之8-组合模式

    组合模式(Composite Pattern) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/403 访问. 组合模式属 ...

  4. LeetCode 861翻转矩阵后得分详细解法

    1. 题目内容 有一个二维矩阵 A 其中每个元素的值为 0 或 1 . 移动是指选择任一行或列,并转换该行或列中的每一个值:将所有 0 都更改为 1,将所有 1 都更改为 0. 在做出任意次数的移动后 ...

  5. 导出Excel文件(项目中会遇到很多将一些数据导出Excel或者et)

    最近在项目中,遇到一些需求,就是将数据导出来,以Excel文件为主:就自己简单的做一些demo:供初学者来学习: // 定义一个保存文件的路径位置 SaveFileDialog dlgPath = n ...

  6. 共享&img (给作者自己

    --------------------------------------------------------- ------------------------------------------ ...

  7. 安国AU6989主控 + K9GBG08U0A(NAND) 制作4GB闪存驱动器

    文档标识符:AU6989_FLASH-DRIVE_D-P8 作者:DLHC 最后修改日期:2020.8.22 本文链接: https://www.cnblogs.com/DLHC-TECH/p/AU6 ...

  8. Redis的数据类型及使用场景

    1.redis 的数据类型 String 字符串 Hash 哈希 List 列表 Set 集合 ZSet(Sorted Set) 有序集合 2.使用场景 2.1 String 用户token 可以用r ...

  9. python数据处理工具 -- pandas(序列与数据框的构造)

    Pandas模块的核心操作对象就是对序列(Series)和数据框(Dataframe).序列可以理解为数据集中的一个字段,数据框是值包含至少两个字段(或序列) 的数据集. 构造序列 1.通过同质的列表 ...

  10. 关于c++11 memory order的理解

    关于C++memory_order的理解 看了c++并发编程实战的内存模型部分后,一直对memory_order不太懂,今天在知乎发现了百度的brpc,恰好有关于原子操作的文档,感觉解释的很好.为了加 ...