using Yi.Framework.Core.Utils; namespace Yi.Framework.MultiTenancy; /// /// 当前租户实现 /// public class CurrentTenant : ICurrentTenant { private readonly ICurrentTenantAccessor _currentTenantAccessor; /// public CurrentTenant(ICurrentTenantAccessor currentTenantAccessor) { _currentTenantAccessor = currentTenantAccessor; } /// /// 是否有效 /// public virtual bool IsAvailable => Id != Guid.Empty; /// /// 租户ID /// public virtual Guid Id => _currentTenantAccessor.Current?.TenantId ?? Guid.Empty; /// /// 租户名称 /// public string? Name => _currentTenantAccessor.Current?.Name; /// /// 替换租户 /// /// /// /// public IDisposable Change(Guid? id, string? name = null) { return SetCurrent(id, name); } /// /// 设置当前租户 /// /// private IDisposable SetCurrent(Guid? tenantId, string? name = null) { BasicTenantInfo? parentScope = _currentTenantAccessor.Current; _currentTenantAccessor.Current = new BasicTenantInfo(tenantId, name); return new DisposeAction>(static ((ICurrentTenantAccessor, BasicTenantInfo) state) => { (ICurrentTenantAccessor currentTenantAccessor, BasicTenantInfo parentScope) = state; currentTenantAccessor.Current = parentScope; }, (_currentTenantAccessor, parentScope)); } }