zoukankan      html  css  js  c++  java
  • Asp.Net Core 在不能使用注入方式的情况下读取配置文件

    最近在用Asp.Net Core 做项目,遇到一个在不能使用注入的类中读取配置文件的问题。

    大家都知道在core中推荐使用注入的方式读取配置文件,这样读取到的值是强类型的,弥补了web.config的缺陷。

    当我用着正爽的时候遇到了一个静态类也需要读取配置文件的问题,纠结了几天才又了这篇博文。

    最初的版本是下面这个样子

    public static class ConfigurationManager
    {
        static IConfiguration Configuration;
        static ConfigurationManager()
        {
            var builder = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
            .AddEnvironmentVariables();
            Configuration = builder.Build();
        }
    
        public static string GetValue(string key)
        {
            return Configuration[key];
        }
    
        public static T GetValue<T>(string key)
        {
            return Configuration.GetValue<T>(key);
        }
    }

    上面的代码只能读取配置appsettings.json中的配置,由于我们的开发环境有好多套,这个并没有满足我们的需求

    但是这个工具类是静态的不能将环境变量注入进来,这是困扰我的一个问题,最后终于在师傅的帮助下有了解决方案,也就是下面这个版本

    public static class ConfigurationManagerV2
    {
        static IConfiguration Configuration;
        static ConfigurationManagerV2()
        {
    // 这里读取环境变量
    var provider = new EnvironmentVariablesConfigurationProvider(); provider.Load(); provider.TryGet("ASPNETCORE_ENVIRONMENT", out string environmentName); var builder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) .AddJsonFile($"appsettings.{environmentName}.json", optional: true, reloadOnChange: true) .AddEnvironmentVariables(); Configuration = builder.Build(); } /// <summary> /// /// </summary> /// <param name="key">不区分大小写</param> /// <returns></returns> public static string GetValue(string key) { return Configuration[key]; } public static T GetValue<T>(string key) { return Configuration.GetValue<T>(key); } }

    这样我们就可以在静态文件中使用配置文件,并且可以根据环境变量来读取不同的配置文件。

    大功告成!

  • 相关阅读:
    u-boot mkconfig文件分析
    uboot的lds文件分析
    gitlab webhook jenkins 403问题解决方案
    【python】将json串写入文件,并以json格式读取出来
    sqlalchemy 中 desc 的使用
    【mysql】如何通过navicat配置表与表的多对一关系,一对一关系?设计外键的效果
    【mysql】一对一关系的理解,以及Navicat Premium怎么设置字段的唯一性(UNIQUE)?
    【mysql】时间类型-如何根据不同的应用场景,选择合适的时间类型?
    Navicat Premium Mac 12 破解方法-亲测成功
    【linux】cp 批量复制文件
  • 原文地址:https://www.cnblogs.com/taohonggou/p/8858956.html
Copyright © 2011-2022 走看看