当前位置: 首页 > news >正文

[转].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}

 

作者: skig
出处: http://www.cnblogs.com/skig/
欢迎转载,但请注明出处。如果大家有任何疑问,可以给我留言,我会及时回复。

 

相关文章:

  • Makefile注意点总结
  • 深入浅出Puppet(一)
  • Mirco F-measure and Macro F-measure
  • mac上使用zsh配置环境变量
  • find用法积累
  • c# 静态变量【学习笔记】
  • linux内核栈与用户栈【转】
  • NodeJS Stream 二:什么是 Stream
  • 枚举转中文,通过反射方法与描述的方式获取
  • log file sync 等待超高一例子
  • Unity 5 Stats窗口
  • svn 安装网站
  • 浅析vue数据绑定
  • Linux CentOS6.6 NFS服务的配置与安装
  • 做网站真难
  • 【css3】浏览器内核及其兼容性
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • CSS盒模型深入
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • Python socket服务器端、客户端传送信息
  • python3 使用 asyncio 代替线程
  • vue-router 实现分析
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 京东美团研发面经
  • 力扣(LeetCode)22
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 树莓派 - 使用须知
  • 小程序开发中的那些坑
  • 中文输入法与React文本输入框的问题与解决方案
  • scrapy中间件源码分析及常用中间件大全
  • 阿里云ACE认证学习知识点梳理
  • 阿里云API、SDK和CLI应用实践方案
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • 函数计算新功能-----支持C#函数
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • ​学习一下,什么是预包装食品?​
  • !$boo在php中什么意思,php前戏
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #Java第九次作业--输入输出流和文件操作
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (04)odoo视图操作
  • (175)FPGA门控时钟技术
  • (2)STM32单片机上位机
  • (8)STL算法之替换
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (附源码)ssm码农论坛 毕业设计 231126
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (三) diretfbrc详解
  • (转) Face-Resources
  • .Net - 类的介绍