[转].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 ...
随机推荐
- C#单例---饿汉式和懒汉式
单例模式: 步骤: 1.定义静态私有对象 2.构造函数私有化 3.定义一个静态的,返回值为该类型的方法,一般以Getinstance/getInit为方法名称 单例模式有懒汉和饿汉,最好使用饿汉 1. ...
- 数据加密实战之记住密码、自动登录和加密保存数据运用DES和MD5混合使用
MD5的简介:MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致.是计算机广泛使用的杂凑算法之一(又译摘要算法.哈希算法),主流编程语言普遍已有 ...
- SQLServer存储引擎——02.内存
SQLServer存储引擎之内存篇: (1)SQL SERVER 内存结构 SQL SERVER 内存结构简图 SQL SERVER 内存空间主要可分为两部分: (1.1)可执行代码(E ...
- git常用命令(转)
git常用命令: git init //初始化本地git环境 git clone XXX//克隆一份代码到本地仓库 git pull //把远程库的代码更新到工作台 git pull --rebase ...
- 安卓手机牛逼软件Termux中安装Archlinux,安装Jdk
说出来你可能不信,手机上居然装了两个linux系统,和真实的linux有些许些差别. 首先安装了Termux以后你发现,好多linux常用功能都有,什么Pyhton,gcc,g++,ruby,Php, ...
- 爬取腾讯课堂IT-互联网分类的的课程信息存入csv文件
标签(空格分隔): python from urllib.request import urlopen from bs4 import BeautifulSoup #获取IT-互联网分类每页的课程的链 ...
- leftjoin及多个leftjoin执行顺序
给个通俗的解释吧.例表aaid adate1 a12 a23 a3表bbid bdate1 b12 b24 b4两个表a,b相连接,要取出id相同的字段select * from a inner jo ...
- db2联邦数据库
目标机器:192.168.0.16 本地机器:192.168.0.18 .登陆本地数据库 db2 connect to dwmm user dainst using dainst ## 打开联邦数据库 ...
- nginx FastCGI模块配置
这个模块允许nginx同FastCGI协同工作,并且控制哪些参数将被安全传递. location / { fastcgi_pass localhost:9000;# 或者http://ip:9000; ...
- CodeForces - 893C-Rumor(并查集变式)
Vova promised himself that he would never play computer games... But recently Firestorm - a well-kno ...