//public void Dispose() //{ // GC.SuppressFinalize(this); //} public IDisposable Use(int?tenantId) { var item = new ScopeItem(tenantId, GetCurrentItem(DataContextKey)); string key = item.Id; if (!ConcurrentItems.TryAdd(key, item)) { throw new AbpException("Can not add item! ConcurrentItems.TryAdd returns false!"); } _dataContext.SetData(DataContextKey, key); return(new DisposeAction(() => { ConcurrentItems.TryRemove(key, out item); if (item == null) { _dataContext.SetData(DataContextKey, null); return; } _dataContext.SetData(DataContextKey, item.Outer?.Id); })); }
private ScopeItem GetCurrentItem(string contextKey) { string objKey = _dataContext.GetData(contextKey) as string; return(objKey != null?ConcurrentItems.GetValueOrDefault(objKey) : null); }