.net core Configuration对象
前因:最近在阅读.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对象的更多相关文章
- IOS开发之—— Core Foundation对象与OC对象相对转换的问题
对ARC盲目依赖的同学: 1过度使用block后,无法解决循环引用问题 2遇到底层Core Foundation对象,需要自己手工管理它们的引用计数时,显得一筹莫展 first:对于底层Core Fo ...
- Configuration对象
Configuration对象 Hibernate的持久化操作离不开SessionFactory对象,使用该对象的openSession()方法可以打开Session对象.而SessionFactor ...
- 无法为请求的 Configuration 对象创建配置文件 错误原因
Configuration config = WebConfigurationManager.OpenWebConfiguration("~"); 无法为请求的 Configura ...
- 使用Core Animation对象来实现动画
转载保留原文地址:http://blog.csdn.net/kqjob/article/details/10417461,转载的 在iOS中如果使用普通的动画则可以使用UIKit提供的动画方式来实现, ...
- 你可能不知道的.Net Core Configuration
目录 执行原理 环境变量 Spring Cloud Config Server 挂卷Volume Config Server vs Volume 执行原理 1. 配置读取顺序:与代码先后顺序一致. p ...
- mybatis源码解读(二)——构建Configuration对象
Configuration 对象保存了所有mybatis的配置信息,主要包括: ①. mybatis-configuration.xml 基础配置文件 ②. mapper.xml 映射器配置文件 1. ...
- C#/ASP.NET应用程序配置文件app.config/web.config的增、删、改操作,无法为请求的 Configuration 对象创建配置文件。
应用程序配置文件,对于asp.net是 web.config,对于WINFORM程序是 App.Config(ExeName.exe.config). 配置文件,对于程序本身来说,就是基础和依据,其本 ...
- 5 -- Hibernate的基本用法 --4 1 创建Configuration对象
org.hibernate.cfg.Configuration实例代表了应用程序到SQL数据库的配置信息,Configuration对象提供了一个buildSessionFactory()方法,该方法 ...
- Mybatis 创建Configuration对象
Mybatis 创建Configuration对象是在项目启动时就创建了. 具体创建流程为: https://blog.csdn.net/wolfcode_cn/article/details/80 ...
随机推荐
- 微信小程序开发着工具获取和更新newticket
newticket是微信开发者工具和微信后台交互的凭证.大多数工具的操作都是需要newticket. 如何获取newticket? 打开开发者工具,依次点击菜单设置->通用设置->代理,使 ...
- C#LeetCode刷题之#59-螺旋矩阵 II(Spiral Matrix II)
目录 问题 示例 分析 问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3678 访问. 给定一个正整数 n,生成一 ...
- C#LeetCode刷题之#459-重复的子字符串(Repeated Substring Pattern)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3945 访问. 给定一个非空的字符串,判断它是否可以由它的一个子串 ...
- Css 图片自适应
设置 CSS .container{ overflow:auto; } img{ width:100%; height:auto; overflow:hidden; } 设置 template < ...
- 一文读懂GaussDB(for Mongo)的计算存储分离架构
摘要:IDC认为,目前阶段来看,企业亟待解决的是数字化能力提升,包括:与业务的深入结合能力:数据处理和挖掘能力:以及IT技术运营和管理能力.特别是数据处理和挖掘能力,因为数字化转型推进企业从以流程为核 ...
- 炼技术(9): 简约而不简单,永不停歇的测试 -- always_run
最强战力,永不停歇的测试:always_run 许多工程师写完程序后,都不愿意对自己的程序做仔细测试. 很多测试说会做自动化测试,可能工作好几年都没真做过多少自动化测试. 我们的解决方案是,在系统的测 ...
- jupyter 安装 卸载 包
# 安装 !pip install 库名 # 卸载 !pip uninstall 库名 -y
- Spring注解驱动开发04(给容器中注册组件的方式)
给容器中注册组件的方式 1. 组件注解标注 + 包扫描(适用于自己写的类) //控制层组件 @Controller public class PersonController { } //业务逻辑层组 ...
- java23种设计模式—— 二、单例模式
源码在我的github和gitee中获取 介绍 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. ...
- JS数组遍历的十二种方式
遍历有如下几种方式 数组方法 map forEach filter find findIndex every some reduce reduceRight 其他方法 for for in for o ...