From 41aad42052dab5644f32b98309856d7f12385a52 Mon Sep 17 00:00:00 2001 From: gdlcf88 Date: Wed, 17 Aug 2022 22:48:52 +0800 Subject: [PATCH] Fix UOW OnCompleted usage with `IAbpApplication` --- .../FlashSaleOrderCreationResultEventHandler.cs | 14 ++++++++++++-- .../CreateFlashSaleResultEventHandler.cs | 10 +++++++++- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/plugins/FlashSales/src/EasyAbp.EShop.Plugins.FlashSales.Application/EasyAbp/EShop/Plugins/FlashSales/FlashSalePlans/FlashSaleOrderCreationResultEventHandler.cs b/plugins/FlashSales/src/EasyAbp.EShop.Plugins.FlashSales.Application/EasyAbp/EShop/Plugins/FlashSales/FlashSalePlans/FlashSaleOrderCreationResultEventHandler.cs index 852d3fa9..f337268e 100644 --- a/plugins/FlashSales/src/EasyAbp.EShop.Plugins.FlashSales.Application/EasyAbp/EShop/Plugins/FlashSales/FlashSalePlans/FlashSaleOrderCreationResultEventHandler.cs +++ b/plugins/FlashSales/src/EasyAbp.EShop.Plugins.FlashSales.Application/EasyAbp/EShop/Plugins/FlashSales/FlashSalePlans/FlashSaleOrderCreationResultEventHandler.cs @@ -2,7 +2,9 @@ using EasyAbp.EShop.Plugins.FlashSales.FlashSaleResults; using EasyAbp.EShop.Plugins.FlashSales.FlashSaleResults.Dtos; using EasyAbp.Eshop.Products.Products; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; +using Volo.Abp; using Volo.Abp.DependencyInjection; using Volo.Abp.EventBus.Distributed; using Volo.Abp.ObjectMapping; @@ -17,6 +19,7 @@ public class FlashSaleOrderCreationResultEventHandler : IDistributedEventHandler protected IFlashSaleInventoryManager FlashSaleInventoryManager { get; } protected IUnitOfWorkManager UnitOfWorkManager { get; } protected IObjectMapper ObjectMapper { get; } + protected IAbpApplication AbpApplication { get; } protected IFlashSaleCurrentResultCache FlashSaleCurrentResultCache { get; } protected IFlashSaleResultRepository FlashSaleResultRepository { get; } @@ -25,6 +28,7 @@ public class FlashSaleOrderCreationResultEventHandler : IDistributedEventHandler IFlashSaleInventoryManager flashSaleInventoryManager, IUnitOfWorkManager unitOfWorkManager, IObjectMapper objectMapper, + IAbpApplication abpApplication, IFlashSaleCurrentResultCache flashSaleCurrentResultCache, IFlashSaleResultRepository flashSaleResultRepository) { @@ -32,6 +36,7 @@ public class FlashSaleOrderCreationResultEventHandler : IDistributedEventHandler FlashSaleInventoryManager = flashSaleInventoryManager; UnitOfWorkManager = unitOfWorkManager; ObjectMapper = objectMapper; + AbpApplication = abpApplication; FlashSaleCurrentResultCache = flashSaleCurrentResultCache; FlashSaleResultRepository = flashSaleResultRepository; } @@ -86,11 +91,16 @@ public class FlashSaleOrderCreationResultEventHandler : IDistributedEventHandler protected virtual async Task ResetFlashSaleCurrentResultCacheAsync(FlashSaleResult flashSaleResult) { - await FlashSaleCurrentResultCache.SetAsync(flashSaleResult.PlanId, flashSaleResult.UserId, + using var scope = AbpApplication.ServiceProvider.CreateScope(); + + var objectMapper = scope.ServiceProvider.GetRequiredService(); + var flashSaleCurrentResultCache = scope.ServiceProvider.GetRequiredService(); + + await flashSaleCurrentResultCache.SetAsync(flashSaleResult.PlanId, flashSaleResult.UserId, new FlashSaleCurrentResultCacheItem { TenantId = flashSaleResult.TenantId, - ResultDto = ObjectMapper.Map(flashSaleResult) + ResultDto = objectMapper.Map(flashSaleResult) }); } } \ No newline at end of file diff --git a/plugins/FlashSales/src/EasyAbp.EShop.Plugins.FlashSales.Application/EasyAbp/EShop/Plugins/FlashSales/FlashSaleResults/CreateFlashSaleResultEventHandler.cs b/plugins/FlashSales/src/EasyAbp.EShop.Plugins.FlashSales.Application/EasyAbp/EShop/Plugins/FlashSales/FlashSaleResults/CreateFlashSaleResultEventHandler.cs index e691edd7..2244db6e 100644 --- a/plugins/FlashSales/src/EasyAbp.EShop.Plugins.FlashSales.Application/EasyAbp/EShop/Plugins/FlashSales/FlashSaleResults/CreateFlashSaleResultEventHandler.cs +++ b/plugins/FlashSales/src/EasyAbp.EShop.Plugins.FlashSales.Application/EasyAbp/EShop/Plugins/FlashSales/FlashSaleResults/CreateFlashSaleResultEventHandler.cs @@ -3,6 +3,7 @@ using EasyAbp.EShop.Plugins.FlashSales.FlashSalePlans; using EasyAbp.EShop.Plugins.FlashSales.FlashSaleResults.Dtos; using EasyAbp.Eshop.Products.Products; using EasyAbp.EShop.Products.Products; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Volo.Abp; using Volo.Abp.DependencyInjection; @@ -25,6 +26,7 @@ public class CreateFlashSaleResultEventHandler : IDistributedEventHandler Logger { get; } protected IAbpDistributedLock AbpDistributedLock { get; } protected IDistributedEventBus DistributedEventBus { get; } + protected IAbpApplication AbpApplication { get; } protected IFlashSaleInventoryManager FlashSaleInventoryManager { get; } protected IFlashSaleCurrentResultCache FlashSaleCurrentResultCache { get; } protected IFlashSaleResultRepository FlashSaleResultRepository { get; } @@ -36,6 +38,7 @@ public class CreateFlashSaleResultEventHandler : IDistributedEventHandler logger, IAbpDistributedLock abpDistributedLock, IDistributedEventBus distributedEventBus, + IAbpApplication abpApplication, IFlashSaleInventoryManager flashSaleInventoryManager, IFlashSaleCurrentResultCache flashSaleCurrentResultCache, IFlashSaleResultRepository flashSaleResultRepository) @@ -46,6 +49,7 @@ public class CreateFlashSaleResultEventHandler : IDistributedEventHandler { - if (!await FlashSaleInventoryManager.TryRollBackInventoryAsync(eventData.TenantId, + using var scope = AbpApplication.ServiceProvider.CreateScope(); + + var flashSaleInventoryManager = scope.ServiceProvider.GetRequiredService(); + + if (!await flashSaleInventoryManager.TryRollBackInventoryAsync(eventData.TenantId, eventData.ProductInventoryProviderName, eventData.Plan.StoreId, eventData.Plan.ProductId, eventData.Plan.ProductSkuId)) {