.NET Core配置文件加载与DI注入配置数据

.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}

时间: 2025-01-06 08:02:04

.NET Core配置文件加载与DI注入配置数据的相关文章

关于bash的配置文件加载

bash的配置文件分为两类全局配置 /etc/profile  /etc/profile.d/*.sh  /etc/bashrc个人配置 ~/.bash_profile  ~/.bashrc profile类的配置:设定环境变量:运行命令或脚本bashrc类的配置:设定本地变量:定义命令别名 登录式shell如何读取配置文件 (通过本地命令行或远程终端登录:su - username)/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profil

hibernate源码-配置文件加载过程分析

Hibernate建议,在一个应用系统当中Configuration与SessionFactory为单例,Session为多例. 当我们执行如下代码,hibernate开始加载默认的配置文件 new Configuration().configure() hibernate会在classath的根路径下,查找名为"hibernate.cfg.xml" 的配置文件,并解析它,过程如图1所示 图1:配置文件加载过程时序图 下面一起分析一下配置文件加载过程 Step 1.Configurat

saltstack源码-启动3-config.py配置文件加载

#目标文件位置/usr/lib/python2.6/site-packages/salt/config.py#这个文件加载配置文件的模块.master和minion的配置文件加载都是在这个模块里面完成的#master的启动在这模块里面只涉及到方法和属性只有几个 master和minion的默认配置属性也在这个文件里面定义 DEFAULT_MASTER_OPTS = { 'interface': '0.0.0.0', 'publish_port': '4505', 'pub_hwm': 1000,

Springboot配置文件加载顺序

使用Springboot开发的时候遇到了配置的问题,外部config里的配置文件本来没有配置https怎么启动还是https呢,原来开发中测试https在classpath路径的配置文件添加https的配置,最后打包jar,加载配置文件的时候由于config里面的配置文件没有配置https,就用classpath里面的配置了,在外部config把https关闭既可以(ssl.enabled=false),下面是Springboot加载配置文件的顺序,这里记录一下. Springboot从下面的位

3springboot:springboot配置文件(外部配置加载顺序、自动配置原理,@Conditional)

1.外部配置加载顺序 SpringBoot也可以从以下位置加载配置: 优先级从高到低 高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置  1.命令行参数 所有的配置都可以在命令行上进行指定 先打包在进行测试 java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --server.port=8087 --server.context-path=/abc 指定访问的路径 多个配置用空格分开: --配置项=值 -- 由jar包外向jar包

springboot启动流程(四)application配置文件加载过程

所有文章 https://www.cnblogs.com/lay2017/p/11478237.html 触发监听器加载配置文件 在上一篇文章中,我们看到了Environment对象的创建方法.同时也稍微提及了一下ConfigFileApplicationListener这个监听器,这个监听器主要工作是为了加载application.properties/yml配置文件的. 回顾一下prepareEnvironment方法的代码 private ConfigurableEnvironment p

只用css实现“每列四行,加载完一列后数据自动填充到下一列”的效果

只用css实现“每列四行,加载完一列后数据自动填充到下一列”的效果.这个题目用图表示如下: 如果将题目换成“只用css实现每行四列,加载完一行后数据自动填充到下一行”,那这个问题就简单多了,相信大家都能使用多种方法实现.但现在这个问题该怎么去解决呢. 对了这个题目,似乎不是那么好解决,毕竟像这类问题我们都是使用js或者模版辅助实现的. 这个题目难点在哪儿? 对动态添加的数据只用css实现这个效果,那就意味着除了动态添加数据外,不可能改变现有的文档结构.什么意思呢?比如对于这种实现,我们可以使用u

Javascript加载talbe(包含分页、数据下载功能)

效果图如下: 首先简单说明一下,后面会给所涉及到的代码都贴上来的. 1.excel图标是一个用户控件,用来触发下载 2.首页.上页......每页多少条,这一块是一个整体,你可以选择放置在表格下面,或者表格上面都可以 3.表格则也是单独的一个,自己任意设置位置 4.复选框是否显示,自己设置,并可设置绑定的值,并有自带的方法可供你用于获取选中的复选框的对象跟值 5.表格的单行.双行.点击.悬浮.标题栏.表格的样式,都可以通过设置参数来修改,图为自带的效果 6.分页默认每页10行,分页的检测.复选框

纯javascript写的table加载,包含分页、数据下载功能

直接先上效果图看看先. 首先简单说明一下,后面会给所涉及到的代码都贴上来的. 1.excel图标是一个用户控件,用来触发下载 2.首页.上页......每页多少条,这一块是一个整体,你可以选择放置在表格下面,或者表格上面都可以 3.表格则也是单独的一个,自己任意设置位置 4.复选框是否显示,自己设置,并可设置绑定的值,并有自带的方法可供你用于获取选中的复选框的对象跟值 5.表格的单行.双行.点击.悬浮.标题栏.表格的样式,都可以通过设置参数来修改,图为自带的效果 6.分页默认每页10行,分页的检