.net core 读取配置文件公共类
前面几种方法之前都有用过,但是个人感觉用起来都不是很顺手。而且如果想要在一个类库中读取配置文件的话简直痛苦到不想理媳妇。
所以自己动手写了一个工具类
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Options; using System; namespace Common { public class ConfigurationHelper { public IConfiguration config { get; set; } public ConfigurationHelper() { IHostingEnvironment env = MyServiceProvider.ServiceProvider.GetRequiredService<IHostingEnvironment>(); config = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) .AddEnvironmentVariables() .Build(); } public T GetAppSettings<T>(string key) where T : class, new() { var appconfig = new ServiceCollection() .AddOptions() .Configure<T>(config.GetSection(key)) .BuildServiceProvider() .GetService<IOptions<T>>() .Value; return appconfig; } } //我比较喜欢单独放这个类,但是这样放更明显 public class MyServiceProvider { public static IServiceProvider ServiceProvider { get; set; } } }
使用这个类的话需要在StartUp的Configure中添加
MyServiceProvider.ServiceProvider = app.ApplicationServices;
然后就可以在任何地方使用此类读取配置文件信息了,而且由于ConfigurationHelper初始化时已经默认加载环境变量,所以同时具备多环境功能。
string path = new ConfigurationHelper().config["RedisPath"]; SettingPath pathss = new ConfigurationHelper().GetAppSettings<SettingPath>("SettingPath");
参考
总结