using Admin.Core.Common.Auth; using Admin.Core.Common.Cache; using AutoMapper; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; using System; namespace Admin.Core.Service { public abstract class BaseService: IBaseService { protected readonly object ServiceProviderLock = new object(); private ICache _cache; private ILoggerFactory _loggerFactory; private IMapper _mapper; private IUser _user; /// /// 缓存 /// public ICache Cache => LazyGetRequiredService(ref _cache); /// /// 日志工厂 /// public ILoggerFactory LoggerFactory => LazyGetRequiredService(ref _loggerFactory); /// /// 映射 /// public IMapper Mapper => LazyGetRequiredService(ref _mapper); public IServiceProvider ServiceProvider { get; set; } /// /// 用户信息 /// public IUser User => LazyGetRequiredService(ref _user); /// /// 日志 /// protected ILogger Logger => _lazyLogger.Value; private Lazy _lazyLogger => new Lazy(() => LoggerFactory?.CreateLogger(GetType().FullName) ?? NullLogger.Instance, true); protected TService LazyGetRequiredService(ref TService reference) { if (reference == null) { lock (ServiceProviderLock) { if (reference == null) { reference = ServiceProvider.GetRequiredService(); } } } return reference; } } }