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