1
0

ConfigHelper.cs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. using Microsoft.Extensions.Configuration;
  2. using System;
  3. using System.IO;
  4. namespace Admin.Core.Common.Helpers
  5. {
  6. /// <summary>
  7. /// 配置帮助类
  8. /// </summary>
  9. public class ConfigHelper
  10. {
  11. /* 使用热更新
  12. var uploadConfig = new ConfigHelper().Load("uploadconfig", _env.EnvironmentName, true);
  13. services.Configure<UploadConfig>(uploadConfig);
  14. private readonly UploadConfig _uploadConfig;
  15. public ImgController(IOptionsMonitor<UploadConfig> uploadConfig)
  16. {
  17. _uploadConfig = uploadConfig.CurrentValue;
  18. }
  19. */
  20. /// <summary>
  21. /// 加载配置文件
  22. /// </summary>
  23. /// <param name="fileName">文件名称</param>
  24. /// <param name="environmentName">环境名称</param>
  25. /// <param name="reloadOnChange">自动更新</param>
  26. /// <returns></returns>
  27. public IConfiguration Load(string fileName, string environmentName = "", bool reloadOnChange = false)
  28. {
  29. var filePath = Path.Combine(AppContext.BaseDirectory, "configs");
  30. if (!Directory.Exists(filePath))
  31. return null;
  32. var builder = new ConfigurationBuilder()
  33. .SetBasePath(filePath)
  34. .AddJsonFile(fileName.ToLower() + ".json", true, reloadOnChange);
  35. if (environmentName.NotNull())
  36. {
  37. builder.AddJsonFile(fileName.ToLower() + "." + environmentName + ".json", optional: true, reloadOnChange: reloadOnChange);
  38. }
  39. return builder.Build();
  40. }
  41. /// <summary>
  42. /// 获得配置信息
  43. /// </summary>
  44. /// <typeparam name="T">配置信息</typeparam>
  45. /// <param name="fileName">文件名称</param>
  46. /// <param name="environmentName">环境名称</param>
  47. /// <param name="reloadOnChange">自动更新</param>
  48. /// <returns></returns>
  49. public T Get<T>(string fileName, string environmentName = "", bool reloadOnChange = false)
  50. {
  51. var configuration = Load(fileName, environmentName, reloadOnChange);
  52. if (configuration == null)
  53. return default;
  54. return configuration.Get<T>();
  55. }
  56. /// <summary>
  57. /// 绑定实例配置信息
  58. /// </summary>
  59. /// <param name="fileName">文件名称</param>
  60. /// <param name="instance">实例配置</param>
  61. /// <param name="environmentName">环境名称</param>
  62. /// <param name="reloadOnChange">自动更新</param>
  63. public void Bind(string fileName, object instance, string environmentName = "", bool reloadOnChange = false)
  64. {
  65. var configuration = Load(fileName, environmentName, reloadOnChange);
  66. if (configuration == null || instance == null)
  67. return;
  68. configuration.Bind(instance);
  69. }
  70. }
  71. }