From 5b07973a39fc3bdb52f2e7c870aed7b6ea3ab388 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 30 Jan 2026 01:03:59 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E7=A7=9F=E6=88=B7?= =?UTF-8?q?=E4=B8=8A=E4=B8=8B=E6=96=87=E4=BD=9C=E7=94=A8=E5=9F=9F=E6=89=A9?= =?UTF-8?q?=E5=B1=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TenantContextAccessorExtensions.cs | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/Core/TakeoutSaaS.Shared.Abstractions/Tenancy/TenantContextAccessorExtensions.cs diff --git a/src/Core/TakeoutSaaS.Shared.Abstractions/Tenancy/TenantContextAccessorExtensions.cs b/src/Core/TakeoutSaaS.Shared.Abstractions/Tenancy/TenantContextAccessorExtensions.cs new file mode 100644 index 0000000..074abab --- /dev/null +++ b/src/Core/TakeoutSaaS.Shared.Abstractions/Tenancy/TenantContextAccessorExtensions.cs @@ -0,0 +1,34 @@ +namespace TakeoutSaaS.Shared.Abstractions.Tenancy; + +/// +/// 扩展方法。 +/// +public static class TenantContextAccessorExtensions +{ + /// + /// 进入指定租户上下文作用域,释放后自动恢复之前的上下文。 + /// + /// 租户上下文访问器。 + /// 租户 ID。 + /// 上下文来源标识(例如 scheduler、seed、admin)。 + /// 租户编码(可选)。 + /// 作用域对象。 + public static IDisposable EnterTenantScope( + this ITenantContextAccessor accessor, + long tenantId, + string source, + string? tenantCode = null) + { + var previous = accessor.Current; + accessor.Current = new TenantContext(tenantId, tenantCode, source); + return new TenantContextScope(accessor, previous); + } + + private sealed class TenantContextScope(ITenantContextAccessor accessor, TenantContext? previous) : IDisposable + { + public void Dispose() + { + accessor.Current = previous; + } + } +}