0
0

BaseService.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. using Admin.Core.Common.Auth;
  2. using Admin.Core.Common.Cache;
  3. using AutoMapper;
  4. using Microsoft.Extensions.DependencyInjection;
  5. using Microsoft.Extensions.Logging;
  6. using Microsoft.Extensions.Logging.Abstractions;
  7. using System;
  8. namespace Admin.Core.Service
  9. {
  10. public abstract class BaseService: IBaseService
  11. {
  12. protected readonly object ServiceProviderLock = new object();
  13. private ICache _cache;
  14. private ILoggerFactory _loggerFactory;
  15. private IMapper _mapper;
  16. private IUser _user;
  17. /// <summary>
  18. /// 缓存
  19. /// </summary>
  20. public ICache Cache => LazyGetRequiredService(ref _cache);
  21. /// <summary>
  22. /// 日志工厂
  23. /// </summary>
  24. public ILoggerFactory LoggerFactory => LazyGetRequiredService(ref _loggerFactory);
  25. /// <summary>
  26. /// 映射
  27. /// </summary>
  28. public IMapper Mapper => LazyGetRequiredService(ref _mapper);
  29. public IServiceProvider ServiceProvider { get; set; }
  30. /// <summary>
  31. /// 用户信息
  32. /// </summary>
  33. public IUser User => LazyGetRequiredService(ref _user);
  34. /// <summary>
  35. /// 日志
  36. /// </summary>
  37. protected ILogger Logger => _lazyLogger.Value;
  38. private Lazy<ILogger> _lazyLogger => new Lazy<ILogger>(() => LoggerFactory?.CreateLogger(GetType().FullName) ?? NullLogger.Instance, true);
  39. protected TService LazyGetRequiredService<TService>(ref TService reference)
  40. {
  41. if (reference == null)
  42. {
  43. lock (ServiceProviderLock)
  44. {
  45. if (reference == null)
  46. {
  47. reference = ServiceProvider.GetRequiredService<TService>();
  48. }
  49. }
  50. }
  51. return reference;
  52. }
  53. }
  54. }