mirror of https://github.com/abpframework/abp.git
3 changed files with 159 additions and 3 deletions
@ -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); |
|||
} |
|||
} |
|||
@ -0,0 +1,21 @@ |
|||
using Microsoft.AspNetCore.SignalR; |
|||
using Volo.Abp.DependencyInjection; |
|||
using Volo.Abp.Users; |
|||
|
|||
namespace Volo.Abp.AspNetCore.SignalR |
|||
{ |
|||
public class AbpSignalRUserIdProvider : IUserIdProvider, ITransientDependency |
|||
{ |
|||
public ICurrentUser CurrentUser { get; } |
|||
|
|||
public AbpSignalRUserIdProvider(ICurrentUser currentUser) |
|||
{ |
|||
CurrentUser = currentUser; |
|||
} |
|||
|
|||
public virtual string GetUserId(HubConnectionContext connection) |
|||
{ |
|||
return CurrentUser.Id?.ToString(); |
|||
} |
|||
} |
|||
} |
|||
Loading…
Reference in new issue