前文讲获取配置文件内容的时候,是获取默认的appsettings.json配置文件的配置,下面说明下如何进行自定义配置文件获取

1. Json Provider

1.1 构建独立的IConfiguration

编写方法

        public static IConfigurationRoot LoadSettings(this IHostEnvironment env)
{
return new ConfigurationBuilder()
.SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
.AddJsonFile("common.json", optional: true, reloadOnChange: false)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: false)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: false)
.AddEnvironmentVariables()
.Build();
}

在Startup构造函数的时候进行赋值替换IConfiguration

        private readonly IConfiguration _configuration;
public Startup(IWebHostEnvironment env)
{
_configuration = env.LoadSettings();
}

该操作添加的配置项,只在startup范围生效。

1.2 在Progrom全局自定义配置

 public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
var env = hostingContext.HostingEnvironment;
config.SetBasePath(env.ContentRootPath);
config.AddJsonFile("devappsettings.json", optional: false, reloadOnChange: true);
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});

注意:添加自定义文件的目录要注意,可能会存在因为目录问题所以找不到配置文件的情况。

2. Memory Provider

允许我们将一个应用程序配置直接配置到内存中,而不是像传统方式那样子必须制定一个物理文件。

            var builder = new ConfigurationBuilder();
var profileCollection = new Dictionary<string, string>
{
{"AuthorProfile:FirstName", "Joydip"},
{"AuthorProfile:LastName", "Kanjilal"},
{"AuthorProfile:Address", "Hyderabad, India"}
};
builder.AddInMemoryCollection(profileCollection);
Configuration = builder.Build();

使用

        public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
var builder = new ConfigurationBuilder();
var profileCollection = new Dictionary<string, string>
{
{"AuthorProfile:FirstName", "Joydip"},
{"AuthorProfile:LastName", "Kanjilal"},
{"AuthorProfile:Address", "Hyderabad, India"}
};
builder.AddInMemoryCollection(profileCollection);
config.AddConfiguration(builder.Build());
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});

然后就可以通过IConfiguration实例去获取了。

3. 公共类获取配置文件

引用组件

Microsoft.Extensions.Configuration.Json

    public class AppSettings
{
private static IConfiguration Configuration { get; set; } public AppSettings(IConfiguration configuration)
{
Configuration = configuration;
} /// <summary>
/// 封装要操作的字符
/// </summary>
/// <param name="sections"></param>
/// <returns></returns>
public static string GetValue(params string[] sections)
{
try
{
if (sections.Any())
return Configuration[string.Join(":", sections)];
}
catch (Exception)
{ }
return "";
} /// <summary>
/// 递归获取配置信息数组
///引用 Microsoft.Extensions.Configuration.Binder 包
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="sections"></param>
/// <returns></returns>
public static List<T> App<T>(params string[] sections)
{
List<T> list = new List<T>();
Configuration.Bind(string.Join(":", sections), list);
return list;
}
}

参考自:https://gitee.com/laozhangIsPhi/Blog.Core

ConfigureServices中配置

services.AddSingleton(new AppSettings(Configuration));

获取指定配置

var info = AppSettings.GetValue("Logging", "LogLevel");

微信公众号【鹏祥】

.Net之配置文件自定义的更多相关文章

  1. 0404-服务注册与发现-客户端负载均衡-两种自定义方式-Ribbon通过代码自定义配置、使用配置文件自定义Ribbon Client

    一.官方文档解读 官方地址:https://cloud.spring.io/spring-cloud-static/Edgware.SR3/single/spring-cloud.html#_cust ...

  2. 使用配置文件自定义Ribbon配置

    1.application.yml——Ribbon配置文件 debug: false spring: application: name: mcc-ribbon-properties cloud: c ...

  3. VS web.config/app.conifg配置文件自定义类型使用智能感知功能

    大家使用VS编辑web.config或app.config时可以使用智能感知功能的,像下面这样很是方便 当然如果是我们自定义的类型也是可以使用智能感知的,因为智能感知的内容是来自你或其他公司(MS)提 ...

  4. spring cloud中通过配置文件自定义Ribbon负载均衡策略

    一.Ribbon中的负载均衡策略 1.Ribbon中支持的负载均衡策略 AvailabilityFilteringRule:过滤掉那些因为一直连接失败的被标记为circuit tripped的后端se ...

  5. laravel配置文件(自定义配置文件)

    laravel配置文件存放目录config里面的文件是自定加载的,也就是说,你在文件夹里面新建一个custom.php,按配置格式写,是可以正常访问的. 1.读取配置的方法: $value = con ...

  6. C# config配置文件 自定义节点读取

    主要使用:ConfigurationSection IConfigurationSectionHandler已被否决 http://technet.microsoft.com/zh-cn/librar ...

  7. App.config和Web.config配置文件的自定义配置节点

    前言 昨天修改代码发现了一个问题,由于自己要在WCF服务接口中添加了一个方法,那么在相应调用的地方进行更新服务就可以了,不料意外发生了,竟然无法更新.左查右查终于发现了问题.App.config配置文 ...

  8. Spring 源码(4)在Spring配置文件中自定义标签如何实现?

    Spring 配置文件自定义标签的前置条件 在上一篇文章https://www.cnblogs.com/redwinter/p/16165274.html Spring BeanFactory的创建过 ...

  9. struts2自定义拦截器与cookie整合实现用户免重复登入

    目的:测试开发时,为了减少用户登入这个繁琐的登入验证,就用struts2做了个简单的struts2拦截器,涉及到了与cookie整合,具体的看代码 结构(两部份)=struts2.xml+自定义拦截器 ...

  10. 每天学点SpringCloud(三):自定义Eureka集群负载均衡策略

    相信看了 每天学点SpringCloud(一):简单服务提供者消费者调用,每天学点SpringCloud(二):服务注册与发现Eureka这两篇的同学都了解到了我的套路,没错,本篇博客同样是为了解决上 ...

随机推荐

  1. 在WPF应用中实现DataGrid的分组显示,以及嵌套明细展示效果

    我在前面随笔<在Winform系统开发中,对表格列表中的内容进行分组展示>,介绍了Winform程序中对表格内容进行了分组的展示,在WPF应用中,同样也可以对表格的内容进行分组展示,不过处 ...

  2. vue插件实现表格拖拽 sortable 遇见的坑

    下载插件 npm install sortable.js --save (下载的时候一定要这样去下载,不要去下载 npm install sortable--save ) 因为sortable.js和 ...

  3. ABP Vnext 微服务 常见问题

    1.token问题 原因:拿token和认证token的服务器不一致 2.minio访问报错 minio错误 S3 API Request made to Console port. S3 R 解决方 ...

  4. Golang漏洞管理

    原文在这里 概述 Go帮助开发人员检测.评估和解决可能被攻击者利用的错误或弱点.在幕后,Go团队运行一个管道来整理关于漏洞的报告,这些报告存储在Go漏洞数据库中.各种库和工具可以读取和分析这些报告,以 ...

  5. go多版本管理

    在日常开发工作过程中,很多时候我们都需要在自己的机器上安装多个go版本,像是go1.16引入的embed,go1.18引入了泛型:又或是自己本地使用的是最新版,但公司的项目中使用的go1.14.go1 ...

  6. 2.1 CE修改器:精确数值扫描

    本关是CE修改器的第一关,用户需要通过 Cheat Engine 工具完成精确扫描值.在这个练习中,需要将一个特定的数值(健康值)改变为 1000.首先,要确保数值类型设置正确,默认的是2字节或4字节 ...

  7. PE格式:新建节并插入代码

    经过了前一章的学习相信你已经能够独立完成FOA与VA之间的互转了,接下来我们将实现在程序中插入新节区,并向新节区内插入一段能够反向连接的ShellCode代码,并保证插入后门的程序依旧能够正常运行不被 ...

  8. JWT( JSON Web Token —— JSON Web 令牌 )的学习笔记

    一.跨域认证的问题 互联网服务离不开用户认证.一般流程是下面这样: 1.用户向服务器发送用户名和密码. 2.服务器验证通过后,在当前对话(session)里面保存相关数据,比如用户角色.登录时间等等. ...

  9. 小知识:在Exadata平台上使用ExaWatcher收集信息

    在非Exadata平台上,我们通常会使用DBA已经很熟悉的OSW,如果有不熟悉的朋友可以参考我之前的随笔初步了解OSW: OSW 快速安装部署 OSW Analyzer分析oswbb日志发生异常 而在 ...

  10. require 与 import

    common.js 模块化规范   app.js 文件: // require 在代码执行阶段才会调用引入文件,编译(预解析)时不会执行,所以下面会报错 // console.log(dep); Re ...