ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

NETCore下IConfiguration和IOptions的用法

2020-03-25 21:52:31  阅读:286  来源: 互联网

标签:test2 NETCore appsettings IConfiguration sample json IOptions


新建一个NETCore Web API项目,在Startup.cs里就会开始使用IConfiguration和IOptions了,我们来看看如何使用。
IConfiguration 是用来加载配置值的,可以加载内存键值对、JSON或XML配置文件,我们通常用来加载缺省的appsettings.json .

1. 注入IConfiguration

执行到Startup的时候,IConfiguration已经被注入到services了,不需要我们额外添加注入的代码,缺省就是读取appsettings.json文件,你可以理解在Startup.cs里有隐藏的注入代码类似如下:

var builder = new ConfigurationBuilder()
               .SetBasePath(env.ContentRootPath)
               .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
               .AddEnvironmentVariables();
Configuration = builder.Build();
services.AddSingleton<IConfiguration>(Configuration);

2. 使用IConfiguration

我们先设置一下appsettings.json

{
  "test1":"v1",
  "test2":{
    "key1":"v2",
    "key2":"v3",
    "key3":4,
    "key4":true
  }
}

在Controller里直接在构造函数里传入IConfiguration


  image.png

可以看到获取appsettings.json里的值很简单,如果是对象值只需要加一个冒号。
更好的方式去获取一个对象是用IOptions,我们接下来看看。

3. 注入IOptions

先定义一个OptionSample类需要实现IOptions接口:


  image.png

然后,注入代码很简单

services.Configure<OptionSample>(Configuration.GetSection("test2"));

这句话等同于以下代码

OptionSample sample = new OptionSample();
sample.key1 = Configration["test2:key1"];
sample.key2 = Configration["test2:key2"];
sample.key3 = Configration["test2:key3"];
sample.key4 = Configration["test2:key4"];
services.AddSingle<IOptions<OptionSample>>(sample);

4. 使用IOptions

这个同样在构造函数里传参数


  image.png

大家可以看到在NETCore中无处不在的依赖注入。源码参考Github



作者:voxer
链接:https://www.jianshu.com/p/b9416867e6e6
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

标签:test2,NETCore,appsettings,IConfiguration,sample,json,IOptions
来源: https://www.cnblogs.com/nimorl/p/12570823.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有