.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. jQuery弹出层插件popbox

    都什么年代了,还自己写弹出层插件!是的,①自己写的自己好控制②可定制性高③兼容低版本IE 本插件有以下特性: 样式分离,可定制,纯净无图片 可自定义按钮及按钮的样式.点击事件 可指定选择器选择页面元素 ...

  2. Python--过滤Mysql慢日志

    ##================================================================## 先来个笑话: 刚交的女朋友让我去他家玩,我觉得空手不好,于是告 ...

  3. 关于WPF中RichTextBox失去焦点后如何保持高亮显示所选择的内容

    其实很简单,只要将容器控件中的附加属性FocusManager.IsFocusScope设为True就可以了 下面是个简单的用例: <Window x:Class="WpfApplic ...

  4. iOS-远程推送

    说到远程推送,应该用的也挺多的,今天就基于SEA的云推送服务,做一个推送的小demo,来了解一下iOS中的远程推送是怎么一回事儿,首先你得有苹果的开发者账号,好咸蛋也差不多了,主要内容走起. 一.准备 ...

  5. linux 学习 常用命令

     以下命令是本人的CentOS6.5系统 一.linux个目录的作用 #linux个目录的作用 /bin 所有用户都可使用的命令 /sbin 超级用户(root)可以使用的命令 /boot 系统目录建 ...

  6. PHP实现RESTful风格的API实例(一)

    最近看了一些关于RESTful的资料,自己动手也写了一个RESTful实例,以下是源码 目录详情: restful/ Request.php 数据操作类 Response.php 输出类 index. ...

  7. 使用__slots__限定实例的成员列表

    使用__slots__限定实例的成员列表 默认情况下,python对象队象的每个实例(instance)都会有一个字典来存储该实例的属性,这样做的好处在于运行时期每个对象可以任意设置新的属性.而相对应 ...

  8. springSide部署出现AnnotationConfigUtils.processCommonDefinitionAnnotations(…) is not public!

    AnnotationConfigUtils.processCommonDefinitionAnnotations(…) is not public! Make sure you're using Sp ...

  9. HTTP学习补充一

    1 HTTP协议协商 1.1 NPN NPN:Next Protocol Negotiation,是由Google公司开发的用于SPDY进行协议协商扩展. 协商过程: 服务端在收到客户端的client ...

  10. 隐藏自定义tabbar(关于tabbar的hide属性对于自定义无效)

    背景: 最近在做一个项目中 需要在tabbar中的一个子控制器中隐藏tabbar. 我是tabbar我是自定义的XIB 视图addsubview到tabbar上. 首先po 一个在网上查到的解决方法: ...