最近在用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
时间: 2024-09-28 20:30:35