[转].NET Core配置文件加载与DI注入配置数据
本文转自:http://www.cnblogs.com/skig/p/6079187.html
.NET Core配置文件
在以前.NET中配置文件都是以App.config / Web.config等XML格式的配置文件,而.NET Core中建议使用以JSON为格式的配置文件,因为使用起来更加方面灵活,而且可以使用.NET Core中的DI注入配置数据。
使用:

1 var config = new ConfigurationBuilder()
2 .AddInMemoryCollection() //将配置文件的数据加载到内存中
3 .SetBasePath(Directory.GetCurrentDirectory()) //指定配置文件所在的目录
4 .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) //指定加载的配置文件
5 .Build(); //编译成对象
6 Console.WriteLine(config["test"]); //获取配置中的数据
7 config["test"] = "test test"; //修改配置对象的数据,配置对象的数据是可以被修改的
8 Console.WriteLine(config["test11"]); //获取配置文件中不存在数据也是不会报错的
9 Console.WriteLine(config["theKey:nextKey"]); //获取:theKey -> nextKey 的值

配置文件appsettings.json文件内容:
1 {
2 "test": "testVal",
3 "theKey": {
4 "nextKey": "keyVal"
5 }
6 }
注意:
ConfigurationBuilder需要添加包:"Microsoft.Extensions.Configuration"
AddJsonFile需要添加包:"Microsoft.Extensions.Configuration.Json"
与DI配合使用

1 var sp = new ServiceCollection()
2 .AddOptions() //注入IOptions<T>,这样就可以在DI容器中获取IOptions<T>了
3 .Configure<TestCls>(config.GetSection("TestCls")) //注入配置数据
4 //也可以对注入的配置数据进行修改
5 .Configure<TestCls>(t =>
6 {
7 t.Name = "Jame"; //修改Name的值
8 })
9 .BuildServiceProvider(); //编译
10
11 var test = sp.GetService<IOptions<TestCls>>(); //获取注入的配置数据对象
12 Console.WriteLine(JsonConvert.SerializeObject(test.Value)); //{"Name":"Jame","Age":123}
13
14 //下面的代码中检验Configure注入的配置数据对象是单例模式的(.NET Core中DI容器的三种生命周期:Singleton(单例), Scoped(作用域), Transient(瞬态))
15 var test1 = sp.GetService<IOptions<TestCls>>();
16 Console.WriteLine(test == test1); //true
17 //创建一个新的作用域获取配置数据对象
18 var test2 = sp.GetService<IServiceScopeFactory>().CreateScope().ServiceProvider.GetService<IOptions<TestCls>>();
19 Console.WriteLine(test == test2); //true

配置测试类:
1 public class TestCls
2 {
3 public string Name { get; set; }
4 public int Age { get; set; }
5 }
appsettings.json中的内容:
1 {
2 "TestCls": {
3 "Name": "Tom",
4 "Age": 123
5 }
6 }
注意:
ServiceCollection需要添加包: "Microsoft.Extensions.DependencyInjection"
AddOptions需要添加包: "Microsoft.Extensions.Options.ConfigurationExtensions"
ASP.NET Core中使用
Startup.cs -> Startup构造方法中进行初始化配置文件:
1 var builder = new ConfigurationBuilder()
2 .AddInMemoryCollection()
3 .SetBasePath(env.ContentRootPath)
4 .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
5 .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);
6 Configuration = builder.Build();
Startup.cs -> ConfigureServices方法中进行注入配置数据:
1 services.AddOptions() //注入IOptions<T>
2 .Configure<TestCls>(Configuration.GetSection(nameof(TestCls)))
3 .Configure<TestCls>(test =>
4 {
5 test.Name = "Jame"; //修改Name的值
6 });
配置文件中的配置数据:

1 {
2 "Logging": {
3 "IncludeScopes": false,
4 "LogLevel": {
5 "Default": "Debug",
6 "System": "Information",
7 "Microsoft": "Information"
8 }
9 },
10 "TestCls": {
11 "Name": "Tom",
12 "Age": 123
13 }
14 }

注入到控制器中:

1 [Route("api/[controller]")]
2 public class ValuesController : Controller
3 {
4 IOptions<TestCls> _test;
5 public ValuesController(IOptions<TestCls> test)
6 {
7 _test = test;
8 }
9 [HttpGet]
10 public string Gets()
11 {
12 return JsonConvert.SerializeObject(_test.Value);
13 }

访问:/api/values
显示:{"Name":"Jame","Age":123}
[转].NET Core配置文件加载与DI注入配置数据的更多相关文章
- .NET Core配置文件加载与DI注入配置数据
.NET Core配置文件 在以前.NET中配置文件都是以App.config / Web.config等XML格式的配置文件,而.NET Core中建议使用以JSON为格式的配置文件,因为使用起来更 ...
- SpringBoot——配置文件加载位置及外部配置加载顺序
声明 本文部分转自:SpringBoot配置文件加载位置与优先级 正文 1. 项目内部配置文件 spring boot 启动会扫描以下位置的application.properties或者applic ...
- springboot的yaml基础语法与取值,配置类,配置文件加载优先级
1.基本语法k:(空格)v:表示一对键值对(一个空格必须有):以空格的缩进来控制层级关系:只要是左对齐的一列数据,都是同一个层级的属性和值也是大小写敏感: server: port: 8081 pat ...
- .net core 深入了解配置文件加载过程
前言 配置文件中程序运行中,担当着不可或缺的角色:通常情况下,使用 visual studio 进行创建项目过程中,项目配置文件会自动生成在项目根目录下,如 appsettings.json, ...
- Spring之配置文件加载方式
spring在org.springframework.core.io包中提供了多种配置文件加载方式.无论是XML.URL还是文件,都有很好的支持.比如基于URL的UrlResource.基于输入流的I ...
- .Net Core·热加载的实现及测试
阅文时长 | 0.25分钟 字数统计 | 460字符 主要内容 | 1.引言&背景 2.解决原理&方法 3.声明与参考资料 『.Net Core·热加载的实现及测试』 编写人 | SC ...
- Spring使用环境变量控制配置文件加载
项目中需要用到很多配置文件,不同环境的配置文件是不一样的,因此如果只用一个配置文件,势必会造成配置文件混乱,这里提供一种利用环境变量控制配置文件加载的方法,如下: 一.配置环境变量 如果是window ...
- 根据配置文件加载js依赖模块(JavaScript面试题)
面试题目 根据下面的配置文件 module=[ {'name':'jquery','src':'/js/lib/jquery-1.8.3.js'}, {'name':'swfobject','src' ...
- struts几个配置文件加载顺序_2015.01.04
struts几个配置文件加载顺序: 01:struts-default.xml 02:struts-plugin.xml 03:struts.xml 04:struts.properties 05:w ...
随机推荐
- 【转载】在AspNetCore 中 使用Redis实现分布式缓存
原文地址:https://www.cnblogs.com/szlblog/p/9045209.html AspNetCore 使用Redis实现分布式缓存 上一篇讲到了,Core的内置缓存:IMemo ...
- NSNumber数字
前言 将基本数据类型包装成 OC 对象 1.NSNumber 与 基本数据类型 的相互转换 // 基本数据类型 转 NSNumber // 对象方法,将整形数据转换为 OC 对象 NSNumber * ...
- Serialization之BinaryFormatter
前言 BinaryFormatter序列化二进制序列化使用二进制编码来生成精简的序列化,以用于存储或基于套接字的网络流等. 内容 下面通过一个小小的例子来给大家说明什么是BinaryFormatter ...
- SP34096 DIVCNTK - Counting Divisors (general)(Min_25筛)
题面 洛谷 \(\sigma_0(i)\) 表示\(i\) 的约数个数 求\(S_k(n)=\sum_{i=1}^n\sigma_0(i^k)\mod 2^{64}\) 多测,\(T\le10^4,n ...
- Python脚本开发练习
打印乘法口诀表 #!/usr/bin/python #coding=utf-8 print("Hello,World....") print("你好,欢迎来到Python ...
- Buy or Build UVA - 1151 Kruskal+枚举
题意: 大概意思是有 n 个点,现在有 q 个方案 ,第 i 个方案耗费为 ci ,使 Ni 个点联通 ,当然也可以直接使两点联通 ,现求最小生成树的代价. 两点直接联通的代价是欧几里得距离的平方: ...
- Python导入命令 import from
一 module通常模块为一个文件,直接使用import来导入就好了.可以作为module的文件类型有".py".".pyo".".pyc" ...
- flex item的width VS flex-basis
flexbox的子元素flex item的宽度,按照以下规则计算: content>width>flex-basis(limited by max/min-width) flex-basi ...
- Unity 动画系统 Animation 和 Animator的小实例
本文结合一个很简单的动画demo,分别采用2种方法,来对比Animation和Animator的使用方式: 方法1:单独使用Animation 方法2:Animation结合Animator 动画De ...
- Django 06 Django模型基础1(ORM简介、数据库连接配置、模型的创建与映射、数据的增删改查)
Django 06 Django模型基础1(ORM简介.数据库连接配置.模型的创建与映射.数据的增删改查) 一.ORM系统 #django模型映射关系 #模型类-----数据表 #类属性-----表字 ...