private IUnitOfWork CreateNewUnitOfWork()
        {
            var scope = _serviceProvider.CreateScope();

            try
            {
                var outerUow = _ambientUnitOfWork.Get();

                var unitOfWork = scope.ServiceProvider.GetRequiredService <IUnitOfWork>();

                unitOfWork.SetOuter(outerUow);

                _ambientUnitOfWork.Set(unitOfWork);

                unitOfWork.Disposed += (sender, args) =>
                {
                    _ambientUnitOfWork.Set(outerUow);
                    scope.Dispose();
                };

                return(unitOfWork);
            }
            catch
            {
                scope.Dispose();
                throw;
            }
        }