App.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. using Infrastructure.Model;
  2. using Microsoft.AspNetCore.Hosting;
  3. using Microsoft.AspNetCore.Http;
  4. using Microsoft.Extensions.Configuration;
  5. using Microsoft.Extensions.DependencyInjection;
  6. using Microsoft.Extensions.Options;
  7. using System;
  8. using System.Linq;
  9. using System.Security.Claims;
  10. namespace Infrastructure
  11. {
  12. public static class App
  13. {
  14. /// <summary>
  15. /// 全局配置文件
  16. /// </summary>
  17. public static OptionsSetting OptionsSetting => CatchOrDefault(() => ServiceProvider?.GetService<IOptions<OptionsSetting>>()?.Value);
  18. /// <summary>
  19. /// 服务提供器
  20. /// </summary>
  21. public static IServiceProvider ServiceProvider => InternalApp.ServiceProvider;
  22. /// <summary>
  23. /// 获取请求上下文
  24. /// </summary>
  25. public static HttpContext HttpContext => CatchOrDefault(() => ServiceProvider?.GetService<IHttpContextAccessor>()?.HttpContext);
  26. /// <summary>
  27. /// 获取请求上下文用户
  28. /// </summary>
  29. public static ClaimsPrincipal User => HttpContext?.User;
  30. /// <summary>
  31. /// 获取用户名
  32. /// </summary>
  33. public static string UserName => User?.Identity?.Name;
  34. /// <summary>
  35. /// 获取Web主机环境
  36. /// </summary>
  37. public static IWebHostEnvironment WebHostEnvironment => InternalApp.WebHostEnvironment;
  38. /// <summary>
  39. /// 获取全局配置
  40. /// </summary>
  41. public static IConfiguration Configuration => CatchOrDefault(() => InternalApp.Configuration, new ConfigurationBuilder().Build());
  42. /// <summary>
  43. /// 获取请求生命周期的服务
  44. /// </summary>
  45. /// <typeparam name="TService"></typeparam>
  46. /// <returns></returns>
  47. public static TService GetService<TService>()
  48. where TService : class
  49. {
  50. return GetService(typeof(TService)) as TService;
  51. }
  52. /// <summary>
  53. /// 获取请求生命周期的服务
  54. /// </summary>
  55. /// <param name="type"></param>
  56. /// <returns></returns>
  57. public static object GetService(Type type)
  58. {
  59. return ServiceProvider.GetService(type);
  60. }
  61. /// <summary>
  62. /// 获取请求生命周期的服务
  63. /// </summary>
  64. /// <typeparam name="TService"></typeparam>
  65. /// <returns></returns>
  66. public static TService GetRequiredService<TService>()
  67. where TService : class
  68. {
  69. return GetRequiredService(typeof(TService)) as TService;
  70. }
  71. /// <summary>
  72. /// 获取请求生命周期的服务
  73. /// </summary>
  74. /// <param name="type"></param>
  75. /// <returns></returns>
  76. public static object GetRequiredService(Type type)
  77. {
  78. return ServiceProvider.GetRequiredService(type);
  79. }
  80. /// <summary>
  81. /// 处理获取对象异常问题
  82. /// </summary>
  83. /// <typeparam name="T">类型</typeparam>
  84. /// <param name="action">获取对象委托</param>
  85. /// <param name="defaultValue">默认值</param>
  86. /// <returns>T</returns>
  87. private static T CatchOrDefault<T>(Func<T> action, T defaultValue = null)
  88. where T : class
  89. {
  90. try
  91. {
  92. return action();
  93. }
  94. catch
  95. {
  96. return defaultValue ?? null;
  97. }
  98. }
  99. /// <summary>
  100. /// 获取默认租户ID
  101. /// </summary>
  102. /// <returns></returns>
  103. public static string GetCurrentTenantId()
  104. {
  105. var headerId = HttpContext?.Request?.Headers["tenantId"].ToString();
  106. var claimId = User?.Claims.FirstOrDefault(f => f.Type == ClaimTypes.PrimaryGroupSid)?.Value;
  107. return !string.IsNullOrEmpty(headerId) ? headerId : (claimId ?? "tenant0");
  108. }
  109. }
  110. }