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;
+ }
+ }
+}