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); } }

 

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

大功告成!

 

转载于:https://www.cnblogs.com/taohonggou/p/8858956.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值