|
|
|
@ -0,0 +1,135 @@
|
|
|
|
|
using System;
|
|
|
|
|
using Microsoft.AspNetCore.Authorization;
|
|
|
|
|
using Microsoft.AspNetCore.SignalR;
|
|
|
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
|
|
|
using Microsoft.Extensions.Localization;
|
|
|
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
|
using Microsoft.Extensions.Logging.Abstractions;
|
|
|
|
|
using Volo.Abp.Localization;
|
|
|
|
|
using Volo.Abp.MultiTenancy;
|
|
|
|
|
using Volo.Abp.Timing;
|
|
|
|
|
using Volo.Abp.Users;
|
|
|
|
|
|
|
|
|
|
namespace Volo.Abp.AspNetCore.SignalR
|
|
|
|
|
{
|
|
|
|
|
public abstract class AbpHub : Hub
|
|
|
|
|
{
|
|
|
|
|
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.GetRequiredService(serviceType);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return reference;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public ILoggerFactory LoggerFactory => LazyGetRequiredService(ref _loggerFactory);
|
|
|
|
|
private ILoggerFactory _loggerFactory;
|
|
|
|
|
|
|
|
|
|
protected ILogger Logger => _lazyLogger.Value;
|
|
|
|
|
private Lazy<ILogger> _lazyLogger => new Lazy<ILogger>(() => LoggerFactory?.CreateLogger(GetType().FullName) ?? NullLogger.Instance, true);
|
|
|
|
|
|
|
|
|
|
public ICurrentUser CurrentUser => LazyGetRequiredService(ref _currentUser);
|
|
|
|
|
private ICurrentUser _currentUser;
|
|
|
|
|
|
|
|
|
|
public ICurrentTenant CurrentTenant => LazyGetRequiredService(ref _currentTenant);
|
|
|
|
|
private ICurrentTenant _currentTenant;
|
|
|
|
|
|
|
|
|
|
public IAuthorizationService AuthorizationService => LazyGetRequiredService(ref _authorizationService);
|
|
|
|
|
private IAuthorizationService _authorizationService;
|
|
|
|
|
|
|
|
|
|
public IClock Clock => LazyGetRequiredService(ref _clock);
|
|
|
|
|
private IClock _clock;
|
|
|
|
|
|
|
|
|
|
public IStringLocalizerFactory StringLocalizerFactory => LazyGetRequiredService(ref _stringLocalizerFactory);
|
|
|
|
|
private IStringLocalizerFactory _stringLocalizerFactory;
|
|
|
|
|
|
|
|
|
|
public IStringLocalizer L => _localizer ?? (_localizer = StringLocalizerFactory.Create(LocalizationResource));
|
|
|
|
|
private IStringLocalizer _localizer;
|
|
|
|
|
|
|
|
|
|
protected Type LocalizationResource
|
|
|
|
|
{
|
|
|
|
|
get => _localizationResource;
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
_localizationResource = value;
|
|
|
|
|
_localizer = null;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
private Type _localizationResource = typeof(DefaultResource);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public abstract class AbpHub<T> : Hub<T>
|
|
|
|
|
where T : class
|
|
|
|
|
{
|
|
|
|
|
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.GetRequiredService(serviceType);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return reference;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public ILoggerFactory LoggerFactory => LazyGetRequiredService(ref _loggerFactory);
|
|
|
|
|
private ILoggerFactory _loggerFactory;
|
|
|
|
|
|
|
|
|
|
protected ILogger Logger => _lazyLogger.Value;
|
|
|
|
|
private Lazy<ILogger> _lazyLogger => new Lazy<ILogger>(() => LoggerFactory?.CreateLogger(GetType().FullName) ?? NullLogger.Instance, true);
|
|
|
|
|
|
|
|
|
|
public ICurrentUser CurrentUser => LazyGetRequiredService(ref _currentUser);
|
|
|
|
|
private ICurrentUser _currentUser;
|
|
|
|
|
|
|
|
|
|
public ICurrentTenant CurrentTenant => LazyGetRequiredService(ref _currentTenant);
|
|
|
|
|
private ICurrentTenant _currentTenant;
|
|
|
|
|
|
|
|
|
|
public IAuthorizationService AuthorizationService => LazyGetRequiredService(ref _authorizationService);
|
|
|
|
|
private IAuthorizationService _authorizationService;
|
|
|
|
|
|
|
|
|
|
public IClock Clock => LazyGetRequiredService(ref _clock);
|
|
|
|
|
private IClock _clock;
|
|
|
|
|
|
|
|
|
|
public IStringLocalizerFactory StringLocalizerFactory => LazyGetRequiredService(ref _stringLocalizerFactory);
|
|
|
|
|
private IStringLocalizerFactory _stringLocalizerFactory;
|
|
|
|
|
|
|
|
|
|
public IStringLocalizer L => _localizer ?? (_localizer = StringLocalizerFactory.Create(LocalizationResource));
|
|
|
|
|
private IStringLocalizer _localizer;
|
|
|
|
|
|
|
|
|
|
protected Type LocalizationResource
|
|
|
|
|
{
|
|
|
|
|
get => _localizationResource;
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
_localizationResource = value;
|
|
|
|
|
_localizer = null;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
private Type _localizationResource = typeof(DefaultResource);
|
|
|
|
|
}
|
|
|
|
|
}
|