.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注入配置数据的更多相关文章

  1. [转].NET Core配置文件加载与DI注入配置数据

    本文转自:http://www.cnblogs.com/skig/p/6079187.html .NET Core配置文件 在以前.NET中配置文件都是以App.config / Web.config ...

  2. SpringBoot——配置文件加载位置及外部配置加载顺序

    声明 本文部分转自:SpringBoot配置文件加载位置与优先级 正文 1. 项目内部配置文件 spring boot 启动会扫描以下位置的application.properties或者applic ...

  3. springboot的yaml基础语法与取值,配置类,配置文件加载优先级

    1.基本语法k:(空格)v:表示一对键值对(一个空格必须有):以空格的缩进来控制层级关系:只要是左对齐的一列数据,都是同一个层级的属性和值也是大小写敏感: server: port: 8081 pat ...

  4. .net core 深入了解配置文件加载过程

    前言     配置文件中程序运行中,担当着不可或缺的角色:通常情况下,使用 visual studio 进行创建项目过程中,项目配置文件会自动生成在项目根目录下,如 appsettings.json, ...

  5. .Net Core·热加载的实现及测试

    阅文时长 | 0.25分钟 字数统计 | 460字符 主要内容 | 1.引言&背景 2.解决原理&方法 3.声明与参考资料 『.Net Core·热加载的实现及测试』 编写人 | SC ...

  6. asp.net core重新加载应用配置

    asp.net core重新加载应用配置 Intro 我把配置放在了数据库或者是Redis里,配置需要修改的时候我要直接修改数据库,然后调用一个接口去重新加载应用配置,于是就尝试写一个运行时重新加载配 ...

  7. asp.netcore 深入了解配置文件加载过程

    前言     配置文件中程序运行中,担当着不可或缺的角色:通常情况下,使用 visual studio 进行创建项目过程中,项目配置文件会自动生成在项目根目录下,如 appsettings.json, ...

  8. Spring之配置文件加载方式

    spring在org.springframework.core.io包中提供了多种配置文件加载方式.无论是XML.URL还是文件,都有很好的支持.比如基于URL的UrlResource.基于输入流的I ...

  9. Spring使用环境变量控制配置文件加载

    项目中需要用到很多配置文件,不同环境的配置文件是不一样的,因此如果只用一个配置文件,势必会造成配置文件混乱,这里提供一种利用环境变量控制配置文件加载的方法,如下: 一.配置环境变量 如果是window ...

随机推荐

  1. [.net 面向对象编程基础] (19) LINQ基础

    [.net 面向对象编程基础] (19)  LINQ基础 上两节我们介绍了.net的数组.集合和泛型.我们说到,数组是从以前编程语言延伸过来的一种引用类型,采用事先定义长度分配存储区域的方式.而集合是 ...

  2. FusionCharts简单教程(八)-----使用网格组件

            有时候我们会觉得使用图像不够直接,对于数据的显示没有表格那样直接明了.所以这里就介绍如何使用网格组件.将网格与图像结合起来.网格组件能够将FusionCharts中的单序列数据以列表的 ...

  3. .net 时间戳和日期互转

    1.时间戳转日期 public static DateTime IntToDateTime(int timestamp) {     ,,)).AddSeconds(timestamp); } 调用: ...

  4. asp.net mvc跨域filter

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  5. Atitit.加密算法ati Aes的框架设计v2.2

    Atitit.加密算法ati Aes的框架设计v2.2 版本进化1 V2.2   add def decode key api1 v1版本1 Aes的历史2 Atitit.加密算法 des  aes  ...

  6. atitit 点播系统 概览 v2 qb1.docx

    atitit 点播系统 概览 v2 qb1.docx 1.1. 多界面(可以挂载多个不同的界面主题)1 1.2. 独立的选片模块(跨设备,跨平台)2 1.3. 跨设备平台(android安卓盒子,pc ...

  7. webService 基础

    一. 1. 定义:Web service是一个平台独立的,跨语言.跨平台.低耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML (标准通用标记语言下的一个子集)标准来描述.发布.发现. ...

  8. Excel学习笔记

    ---恢复内容开始--- -----------随学随记----------- 获取当前日期: 获取当前系统时间,包含年月日时分秒: =NOW() 获取当前系统时间,包含年月日: =TODAY() 只 ...

  9. javascript设计模式与开发实践阅读笔记(5)——策略模式

    策略模式:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换. 我的理解就是把各种方法封装成函数,同时存在一个可以调用这些方法的公共函数.这样做的好处是可以消化掉内部的分支判断,使代码效率 ...

  10. C++程序员们,快来写最简洁的单例模式吧

    想必每一位程序员都对设计模式中的单例模式非常的熟悉吧,以往我们用C++实现一个单例模式需要写以下代码: class CSingleton { private: CSingleton() //构造函数是 ...