From af0ccfc89752a68cb87bb4c637e0db0fec7da216 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 22 Sep 2017 17:07:49 +0300 Subject: [PATCH] UnitOfWorkManager refactored. --- .../Volo/Abp/Uow/UnitOfWorkManager.cs | 63 ++++++++++--------- 1 file changed, 34 insertions(+), 29 deletions(-) diff --git a/src/Volo.Abp/Volo/Abp/Uow/UnitOfWorkManager.cs b/src/Volo.Abp/Volo/Abp/Uow/UnitOfWorkManager.cs index a5a0d18880..4d28668fa9 100644 --- a/src/Volo.Abp/Volo/Abp/Uow/UnitOfWorkManager.cs +++ b/src/Volo.Abp/Volo/Abp/Uow/UnitOfWorkManager.cs @@ -32,33 +32,7 @@ namespace Volo.Abp.Uow options.RequiresNew = true; } - var outerUow = _ambientUnitOfWork.UnitOfWork; - - var scope = _serviceProvider.CreateScope(); - IUnitOfWork unitOfWork; - try - { - unitOfWork = scope.ServiceProvider.GetRequiredService(); - - unitOfWork.SetOuter(outerUow); - unitOfWork.IsReserved = options.ReservationName != null; - unitOfWork.ReservationName = options.ReservationName; - } - catch - { - scope.Dispose(); - throw; - } - - _ambientUnitOfWork.SetUnitOfWork(unitOfWork); - - unitOfWork.Disposed += (sender, args) => - { - _ambientUnitOfWork.SetUnitOfWork(outerUow); - scope.Dispose(); - }; - - return unitOfWork; + return CreateUnitOfWork(options); } public IBasicUnitOfWork BeginReserved(string reservationName) @@ -66,7 +40,7 @@ namespace Volo.Abp.Uow Check.NotNull(reservationName, nameof(reservationName)); var uow = _ambientUnitOfWork.UnitOfWork; - + //Find reserved unit of work starting from current and going to outers while (uow != null && !uow.IsReservedFor(reservationName)) { @@ -85,7 +59,7 @@ namespace Volo.Abp.Uow private IUnitOfWork GetCurrentUnitOfWork() { var uow = _ambientUnitOfWork.UnitOfWork; - + //Skip reserved unit of work while (uow != null && uow.IsReserved) { @@ -94,5 +68,36 @@ namespace Volo.Abp.Uow return uow; } + + private IUnitOfWork CreateUnitOfWork(UnitOfWorkStartOptions options) + { + var scope = _serviceProvider.CreateScope(); + + try + { + var outerUow = _ambientUnitOfWork.UnitOfWork; + + var unitOfWork = scope.ServiceProvider.GetRequiredService(); + + unitOfWork.SetOuter(outerUow); + unitOfWork.IsReserved = options.ReservationName != null; + unitOfWork.ReservationName = options.ReservationName; + + _ambientUnitOfWork.SetUnitOfWork(unitOfWork); + + unitOfWork.Disposed += (sender, args) => + { + _ambientUnitOfWork.SetUnitOfWork(outerUow); + scope.Dispose(); + }; + + return unitOfWork; + } + catch + { + scope.Dispose(); + throw; + } + } } } \ No newline at end of file