.NET Core配置文件加载与DI注入配置数据
.NET Core配置文件
在以前.NET中配置文件都是以App.config / Web.config等XML格式的配置文件,而.NET Core中建议使用以JSON为格式的配置文件,因为使用起来更加方面灵活,而且可以使用.NET Core中的DI注入配置数据。
使用:
var config = new ConfigurationBuilder()
.AddInMemoryCollection() //将配置文件的数据加载到内存中
.SetBasePath(Directory.GetCurrentDirectory()) //指定配置文件所在的目录
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) //指定加载的配置文件
.Build(); //编译成对象
Console.WriteLine(config["test"]); //获取配置中的数据
config["test"] = "test test"; //修改配置对象的数据,配置对象的数据是可以被修改的
Console.WriteLine(config["test11"]); //获取配置文件中不存在数据也是不会报错的
Console.WriteLine(config["theKey:nextKey"]); //获取:theKey -> nextKey 的值
配置文件appsettings.json文件内容:
{
"test": "testVal",
"theKey": {
"nextKey": "keyVal"
}
}
注意:
ConfigurationBuilder需要添加包:"Microsoft.Extensions.Configuration"
AddJsonFile需要添加包:"Microsoft.Extensions.Configuration.Json"
与DI配合使用
var sp = new ServiceCollection()
.AddOptions() //注入IOptions<T>,这样就可以在DI容器中获取IOptions<T>了
.Configure<TestCls>(config.GetSection("TestCls")) //注入配置数据
//也可以对注入的配置数据进行修改
.Configure<TestCls>(t =>
{
t.Name = "Jame"; //修改Name的值
})
.BuildServiceProvider(); //编译 var test = sp.GetService<IOptions<TestCls>>(); //获取注入的配置数据对象
Console.WriteLine(JsonConvert.SerializeObject(test.Value)); //{"Name":"Jame","Age":123} //下面的代码中检验Configure注入的配置数据对象是单例模式的(.NET Core中DI容器的三种生命周期:Singleton(单例), Scoped(作用域), Transient(瞬态))
var test1 = sp.GetService<IOptions<TestCls>>();
Console.WriteLine(test == test1); //true
//创建一个新的作用域获取配置数据对象
var test2 = sp.GetService<IServiceScopeFactory>().CreateScope().ServiceProvider.GetService<IOptions<TestCls>>();
Console.WriteLine(test == test2); //true
配置测试类:
public class TestCls
{
public string Name { get; set; }
public int Age { get; set; }
}
appsettings.json中的内容:
{
"TestCls": {
"Name": "Tom",
"Age":
}
}
注意:
ServiceCollection需要添加包: "Microsoft.Extensions.DependencyInjection"
AddOptions需要添加包: "Microsoft.Extensions.Options.ConfigurationExtensions"
ASP.NET Core中使用
Startup.cs -> Startup构造方法中进行初始化配置文件:
var builder = new ConfigurationBuilder()
.AddInMemoryCollection()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);
Configuration = builder.Build();
Startup.cs -> ConfigureServices方法中进行注入配置数据:
services.AddOptions() //注入IOptions<T>
.Configure<TestCls>(Configuration.GetSection(nameof(TestCls)))
.Configure<TestCls>(test =>
{
test.Name = "Jame"; //修改Name的值
});
配置文件中的配置数据:
{
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
}
},
"TestCls": {
"Name": "Tom",
"Age":
}
}
注入到控制器中:
[Route("api/[controller]")]
public class ValuesController : Controller
{
IOptions<TestCls> _test;
public ValuesController(IOptions<TestCls> test)
{
_test = test;
}
[HttpGet]
public string Gets()
{
return JsonConvert.SerializeObject(_test.Value);
}
访问:/api/values
显示:{"Name":"Jame","Age":123}
.NET Core配置文件加载与DI注入配置数据的更多相关文章
- [转].NET Core配置文件加载与DI注入配置数据
本文转自:http://www.cnblogs.com/skig/p/6079187.html .NET Core配置文件 在以前.NET中配置文件都是以App.config / Web.config ...
- SpringBoot——配置文件加载位置及外部配置加载顺序
声明 本文部分转自:SpringBoot配置文件加载位置与优先级 正文 1. 项目内部配置文件 spring boot 启动会扫描以下位置的application.properties或者applic ...
- springboot的yaml基础语法与取值,配置类,配置文件加载优先级
1.基本语法k:(空格)v:表示一对键值对(一个空格必须有):以空格的缩进来控制层级关系:只要是左对齐的一列数据,都是同一个层级的属性和值也是大小写敏感: server: port: 8081 pat ...
- .net core 深入了解配置文件加载过程
前言 配置文件中程序运行中,担当着不可或缺的角色:通常情况下,使用 visual studio 进行创建项目过程中,项目配置文件会自动生成在项目根目录下,如 appsettings.json, ...
- .Net Core·热加载的实现及测试
阅文时长 | 0.25分钟 字数统计 | 460字符 主要内容 | 1.引言&背景 2.解决原理&方法 3.声明与参考资料 『.Net Core·热加载的实现及测试』 编写人 | SC ...
- asp.net core重新加载应用配置
asp.net core重新加载应用配置 Intro 我把配置放在了数据库或者是Redis里,配置需要修改的时候我要直接修改数据库,然后调用一个接口去重新加载应用配置,于是就尝试写一个运行时重新加载配 ...
- asp.netcore 深入了解配置文件加载过程
前言 配置文件中程序运行中,担当着不可或缺的角色:通常情况下,使用 visual studio 进行创建项目过程中,项目配置文件会自动生成在项目根目录下,如 appsettings.json, ...
- Spring之配置文件加载方式
spring在org.springframework.core.io包中提供了多种配置文件加载方式.无论是XML.URL还是文件,都有很好的支持.比如基于URL的UrlResource.基于输入流的I ...
- Spring使用环境变量控制配置文件加载
项目中需要用到很多配置文件,不同环境的配置文件是不一样的,因此如果只用一个配置文件,势必会造成配置文件混乱,这里提供一种利用环境变量控制配置文件加载的方法,如下: 一.配置环境变量 如果是window ...
随机推荐
- 作业八—Alpha阶段项目总结
一.项目的预期目标: 我们的图书管理系统之前的目标是做出可以让读者和管理员采用不同的搜索方式,并且时要做到读者和管理者两种不同的方式的!但是我们目前做到了部分搜索方式和管理员界面,主要原因是该项目如果 ...
- 【摘选引用】在安全的SQL 密码也不过如此
SQL密码再安全也禁不住破解!!! http://www.sqlservercentral.com/articles/password+cracking/96540/ 备注:[摘选引用]是本人日常收集 ...
- JavaScript 常用功能总结
小编吐血整理加上翻译,太辛苦了~求赞! 本文主要总结了JavaScript 常用功能总结,如一些常用的JS 对象,基本数据结构,功能函数等,还有一些常用的设计模式. 目录: 众所周知,JavaScri ...
- Springlake-01 介绍&功能&安装
1. 简介与功能 1)Springlake 是一个企业内容平台SECP 2)是一个可配置的系统,80%内容可以配置 3)允许建立和配置垂直解决方案 4)敏捷和占用空间小,可伸缩 5)端到端的安全性与性 ...
- Redis教程(十一):虚拟内存介绍:
转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/138.html 一.简介: 和大多NoSQL数据库一样,Redis同样遵循 ...
- JAVA环境配置-Eclipse新建项目
首先配置安装jdk和jre 安装如下: 然后配置变量环境:右键我的电脑--属性--高级系统设置--环境变量--系统变量--找到PATH--编辑 将安装配置的jdk的目录和jdk目录下的bin目录放入其 ...
- 带你走近AngularJS - 创建自定义指令
带你走近AngularJS系列: 带你走近AngularJS - 基本功能介绍 带你走近AngularJS - 体验指令实例 带你走近AngularJS - 创建自定义指令 ------------- ...
- Java学习之路:不走弯路,就是捷径
1.如何学习程序设计? JAVA是一种平台,也是一种程序设计语言,如何学好程序设计不仅仅适用于JAVA,对C++等其他程序设计语言也一样管用.有编程高手认为,JAVA也好C也好没什么分别,拿来就用.为 ...
- 模糊测试——强制发掘安全漏洞的利器(Jolt 大奖精选丛书)
模糊测试——强制发掘安全漏洞的利器(Jolt 大奖精选丛书) [美]Sutton, M.Greene, A.Amini, P. 著 段念赵勇译 ISBN 978-7-121-21083-9 2013年 ...
- Android Studio导入System Library步骤
转载请注明出处:http://www.cnblogs.com/cnwutianhao/p/6242170.html 请尊重知识产权!!! 同步更新到CSDN:http://blog.csdn.net ...