feat: 新增租户上下文作用域扩展
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
namespace TakeoutSaaS.Shared.Abstractions.Tenancy;
|
||||
|
||||
/// <summary>
|
||||
/// <see cref="ITenantContextAccessor"/> 扩展方法。
|
||||
/// </summary>
|
||||
public static class TenantContextAccessorExtensions
|
||||
{
|
||||
/// <summary>
|
||||
/// 进入指定租户上下文作用域,释放后自动恢复之前的上下文。
|
||||
/// </summary>
|
||||
/// <param name="accessor">租户上下文访问器。</param>
|
||||
/// <param name="tenantId">租户 ID。</param>
|
||||
/// <param name="source">上下文来源标识(例如 scheduler、seed、admin)。</param>
|
||||
/// <param name="tenantCode">租户编码(可选)。</param>
|
||||
/// <returns>作用域对象。</returns>
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user