AI
Size: a a a
AI
AS
P🤔
NT
NT
NT
NT
СС
V🧀
AM
AS
V🧀
AM
P
AS
P
P
V🧀
P
VS
/// <summary>
/// TODO Заложить в этот класс все необходимые для каждого сервисв свойства и методы
/// </summary>
public abstract class ApplicationServiceBase
{
protected ApplicationServiceBase(ILoggerFactory loggerFactory)
{
Logger = loggerFactory?.CreateLogger(GetType().FullName);
}
public IServiceProvider ServiceProvider { get; set; }
protected readonly object ServiceProviderLock = new object();
protected TService LazyGetRequiredService<TService>(ref TService reference)
=> LazyGetRequiredService(typeof(TService), ref reference);
protected TRef LazyGetRequiredService<TRef>(Type serviceType, ref TRef reference)
{
if (reference == null)
{
lock (ServiceProviderLock)
{
if (reference == null)
{
reference = (TRef)ServiceProvider.GetService(serviceType);
}
}
}
return reference;
}
//https://stackify.com/net-core-loggerfactory-use-correctly/
protected ILoggerFactory LoggerFactory => LazyGetRequiredService(ref _loggerFactory);
private ILoggerFactory _loggerFactory;
protected ILogger Logger;
//protected ILogger Logger => _lazyLogger.Value;
//private Lazy<ILogger> _lazyLogger => new Lazy<ILogger>(() => LoggerFactory?.CreateLogger(GetType().FullName) ?? NullLogger.Instance, true);
}