Browse Source

Use IServiceScopeFactory in some interceptors.

pull/6815/head
maliming 6 years ago
parent
commit
e2feaef57d
  1. 45
      framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingInterceptor.cs
  2. 2
      framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/AuthorizationInterceptor.cs
  3. 19
      framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureInterceptor.cs
  4. 40
      framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkInterceptor.cs

45
framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingInterceptor.cs

@ -10,11 +10,11 @@ namespace Volo.Abp.Auditing
{
public class AuditingInterceptor : AbpInterceptor, ITransientDependency
{
private readonly IServiceProvider _serviceProvider;
private readonly IServiceScopeFactory _serviceScopeFactory;
public AuditingInterceptor(IServiceProvider serviceProvider)
public AuditingInterceptor(IServiceScopeFactory serviceScopeFactory)
{
_serviceProvider = serviceProvider;
_serviceScopeFactory = serviceScopeFactory;
}
public override async Task InterceptAsync(IAbpMethodInvocation invocation)
@ -57,28 +57,31 @@ namespace Volo.Abp.Auditing
return false;
}
var auditingManager = _serviceProvider.GetRequiredService<IAuditingManager>();
var auditLogScope = auditingManager.Current;
if (auditLogScope == null)
using (var scope = _serviceScopeFactory.CreateScope())
{
return false;
}
var auditingManager = scope.ServiceProvider.GetRequiredService<IAuditingManager>();
var auditLogScope = auditingManager.Current;
if (auditLogScope == null)
{
return false;
}
var auditingHelper = _serviceProvider.GetRequiredService<IAuditingHelper>();
if (!auditingHelper.ShouldSaveAudit(invocation.Method))
{
return false;
}
var auditingHelper = scope.ServiceProvider.GetRequiredService<IAuditingHelper>();
if (!auditingHelper.ShouldSaveAudit(invocation.Method))
{
return false;
}
auditLog = auditLogScope.Log;
auditLogAction = auditingHelper.CreateAuditLogAction(
auditLog,
invocation.TargetObject.GetType(),
invocation.Method,
invocation.Arguments
);
auditLog = auditLogScope.Log;
auditLogAction = auditingHelper.CreateAuditLogAction(
auditLog,
invocation.TargetObject.GetType(),
invocation.Method,
invocation.Arguments
);
return true;
return true;
}
}
}
}

2
framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/AuthorizationInterceptor.cs

@ -13,7 +13,7 @@ namespace Volo.Abp.Authorization
_methodInvocationAuthorizationService = methodInvocationAuthorizationService;
}
public async override Task InterceptAsync(IAbpMethodInvocation invocation)
public override async Task InterceptAsync(IAbpMethodInvocation invocation)
{
await AuthorizeAsync(invocation);
await invocation.ProceedAsync();

19
framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureInterceptor.cs

@ -9,11 +9,11 @@ namespace Volo.Abp.Features
{
public class FeatureInterceptor : AbpInterceptor, ITransientDependency
{
private readonly IServiceProvider _serviceProvider;
private readonly IServiceScopeFactory _serviceScopeFactory;
public FeatureInterceptor(IServiceProvider serviceProvider)
public FeatureInterceptor(IServiceScopeFactory serviceScopeFactory)
{
_serviceProvider = serviceProvider;
_serviceScopeFactory = serviceScopeFactory;
}
public override async Task InterceptAsync(IAbpMethodInvocation invocation)
@ -30,11 +30,14 @@ namespace Volo.Abp.Features
protected virtual async Task CheckFeaturesAsync(IAbpMethodInvocation invocation)
{
await _serviceProvider.GetRequiredService<IMethodInvocationFeatureCheckerService>().CheckAsync(
new MethodInvocationFeatureCheckerContext(
invocation.Method
)
);
using (var scope = _serviceScopeFactory.CreateScope())
{
await scope.ServiceProvider.GetRequiredService<IMethodInvocationFeatureCheckerService>().CheckAsync(
new MethodInvocationFeatureCheckerContext(
invocation.Method
)
);
}
}
}
}

40
framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkInterceptor.cs

@ -10,11 +10,11 @@ namespace Volo.Abp.Uow
{
public class UnitOfWorkInterceptor : AbpInterceptor, ITransientDependency
{
private readonly IServiceProvider _serviceProvider;
private readonly IServiceScopeFactory _serviceScopeFactory;
public UnitOfWorkInterceptor(IServiceProvider serviceProvider)
public UnitOfWorkInterceptor(IServiceScopeFactory serviceScopeFactory)
{
_serviceProvider = serviceProvider;
_serviceScopeFactory = serviceScopeFactory;
}
public override async Task InterceptAsync(IAbpMethodInvocation invocation)
@ -25,24 +25,28 @@ namespace Volo.Abp.Uow
return;
}
var options = CreateOptions(invocation, unitOfWorkAttribute);
var unitOfWorkManager = _serviceProvider.GetRequiredService<IUnitOfWorkManager>();
//Trying to begin a reserved UOW by AbpUnitOfWorkMiddleware
if (unitOfWorkManager.TryBeginReserved(UnitOfWork.UnitOfWorkReservationName, options))
using (var scope = _serviceScopeFactory.CreateScope())
{
await invocation.ProceedAsync();
return;
}
var options = CreateOptions(scope.ServiceProvider, invocation, unitOfWorkAttribute);
using (var uow = unitOfWorkManager.Begin(options))
{
await invocation.ProceedAsync();
await uow.CompleteAsync();
var unitOfWorkManager = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>();
//Trying to begin a reserved UOW by AbpUnitOfWorkMiddleware
if (unitOfWorkManager.TryBeginReserved(UnitOfWork.UnitOfWorkReservationName, options))
{
await invocation.ProceedAsync();
return;
}
using (var uow = unitOfWorkManager.Begin(options))
{
await invocation.ProceedAsync();
await uow.CompleteAsync();
}
}
}
private AbpUnitOfWorkOptions CreateOptions(IAbpMethodInvocation invocation, [CanBeNull] UnitOfWorkAttribute unitOfWorkAttribute)
private AbpUnitOfWorkOptions CreateOptions(IServiceProvider serviceProvider, IAbpMethodInvocation invocation, [CanBeNull] UnitOfWorkAttribute unitOfWorkAttribute)
{
var options = new AbpUnitOfWorkOptions();
@ -50,9 +54,9 @@ namespace Volo.Abp.Uow
if (unitOfWorkAttribute?.IsTransactional == null)
{
var defaultOptions = _serviceProvider.GetRequiredService<IOptions<AbpUnitOfWorkDefaultOptions>>().Value;
var defaultOptions = serviceProvider.GetRequiredService<IOptions<AbpUnitOfWorkDefaultOptions>>().Value;
options.IsTransactional = defaultOptions.CalculateIsTransactional(
autoValue: _serviceProvider.GetRequiredService<IUnitOfWorkTransactionBehaviourProvider>().IsTransactional
autoValue: serviceProvider.GetRequiredService<IUnitOfWorkTransactionBehaviourProvider>().IsTransactional
?? !invocation.Method.Name.StartsWith("Get", StringComparison.InvariantCultureIgnoreCase)
);
}

Loading…
Cancel
Save