diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/DisposeAction.cs b/framework/src/Volo.Abp.Core/Volo/Abp/DisposeAction.cs index ba0b61eed7..67fd64cae1 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/DisposeAction.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/DisposeAction.cs @@ -27,3 +27,21 @@ public class DisposeAction : IDisposable _action(); } } + +public class DisposeActionWithoutClosureAlloc : IDisposable +{ + private readonly Action _action; + [CanBeNull] private readonly T _parameter; + public DisposeActionWithoutClosureAlloc(Action action, T parameter) + { + Check.NotNull(action, nameof(action)); + + _action = action; + _parameter = parameter; + } + public void Dispose() + { + _action(_parameter); + } +} + diff --git a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/CurrentTenant.cs b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/CurrentTenant.cs index a86ce2a40c..013503d871 100644 --- a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/CurrentTenant.cs +++ b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/CurrentTenant.cs @@ -27,9 +27,10 @@ public class CurrentTenant : ICurrentTenant, ITransientDependency { var parentScope = _currentTenantAccessor.Current; _currentTenantAccessor.Current = new BasicTenantInfo(tenantId, name); - return new DisposeAction(() => + return new DisposeActionWithoutClosureAlloc>(static (state) => { - _currentTenantAccessor.Current = parentScope; - }); + var (currentTenantAccessor, parentScope) = state; + currentTenantAccessor.Current = parentScope; + }, (_currentTenantAccessor, parentScope)); } }