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;
}
}
}