[转].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 ...
 
随机推荐
- github blog
			
git version 2.18.0.windows.1 node-v10.8.0-win-x64.zip 1 安装node.js,直接下载,配置环境变量即可(win10重启生效) 2 git安装,略 ...
 - AngularJS(一)理论篇
			
前言 大概今年春天的时候,自己对这个词产生了兴趣,那会只是简单的查了一下,并没有深入研究过这部分知识块,现在终于开始接触这些东西. 内容 AngularJS在web应用方面是一个非常完美的JavaSc ...
 - 查看ip常见命令...
			
1.获取ip Unix用户可以在命令提示符中输入ifconfig来获取. 使用Windows的用户,请尝试使用 ipconfig 命令.
 - servlet验证账号密码
			
截图部分: 下载链接:https://gitee.com/lgcj1218/j2eehomework
 - ribbon负载均衡
			
ribbon的负载均衡策略有很多 IRule 这是所有负载均衡策略的父接口,里边的核心方法就是choose方法,用来选择一个服务实例. AbstractLoadBalancerRule Abstrac ...
 - 小程序渲染问题:ios显示安卓不显示
			
问题描述: 测试库转到正式库后添加数据,小程序数据渲染不出来,但是测试库没问题,ios数据能显示,没问题,但是安卓显示没数据. 排除是服务器https证书问题,如果是证书问题,小程序会直接调不了接口. ...
 - php 常见递归实例
			
//计算数组{1,1,2,3,5,8.......} 第n位值 function Process1($i){ if ($i == 0) return 0; if ($i == 1) return 1; ...
 - H5切换至后台页面
			
先说重点,试了很多种方法,这个真实有效 var reLoadLeftTime = false ;//监听浏览器当前页面是否被激活的事件var hiddenProperty = 'hidden' in ...
 - Python数据分析之pandas学习(基础操作)
			
一.pandas数据结构介绍 在pandas中有两类非常重要的数据结构,即序列Series和数据框DataFrame.Series类似于numpy中的一维数组,除了通吃一维数组可用的函数或方法,而且其 ...
 - day_08  文件操作
			
常用模式解释 open表示打开一个文件 f 变量, 操控XXX.txt文件的句柄 r:只读 w:只写 a:追加写入 b:byte,这种模式下,encoding不能用utf-8字符集 1. 文件的基本操 ...