本文转自: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
欢迎转载,但请注明出处。如果大家有任何疑问,可以给我留言,我会及时回复。

最新文章

  1. ANE 从入门到精通 --- 使用R* 访问资源
  2. JS_MediaPlayer类
  3. [deviceone开发]-优惠券商户管理端App开源
  4. 20145320《Java程序设计》第四次实验报告
  5. Eclipse配置详解(包括智能提示设置、智能提示插件修改,修改空格自动上屏、JDK配置、各种快捷键列表……)
  6. 组合数学 - 母函数的运用 --- hdu 1709 :The Balance
  7. PHP 错误与异常 笔记与总结(9)自定义错误处理器
  8. SharePoint 2013 搜索体系结构
  9. 黄聪:Discuz!的SEO优化策略一:如何设置标题 &amp; 如何去掉Powered by Discuz!尾巴
  10. UIScrollView 期本使用方法
  11. WordPress中文汉字username不能注冊怎么办?
  12. Entity Framework Core 批处理语句
  13. Python模块学习------ 正则表达式
  14. 2018-2019-2 《Java程序设计》第8周学习总结
  15. 对我们最常用的软件QQ的看法
  16. vmware下centos克隆功能对网络的设置
  17. 使用GoldenGate初始化的两种方式
  18. Visual Studio 2013中引入Web Service的简单方法visual studio 引用 wsdl
  19. SVN: is scheduled for addition, but is missing
  20. git 代码冲突处理

热门文章

  1. MyBatis的使用步骤及配置
  2. 「FJ2014集训」采药人的路径
  3. P3240 [HNOI2015]实验比较 树形DP
  4. IdentityServer4 学习笔记[2]-用户名密码验证
  5. C++基础学习2:命名空间
  6. atcoder 2579
  7. 7.Palindrome Linked List(回文链表)
  8. 4.Single Number(出现一次的数)
  9. [JavaScript]instanceof String not behaving as expected in Google Apps Script
  10. 百度地图 js 调用