//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);
            }));
        }
Exemplo n.º 2
0
        private ScopeItem GetCurrentItem(string contextKey)
        {
            string objKey = _dataContext.GetData(contextKey) as string;

            return(objKey != null?ConcurrentItems.GetValueOrDefault(objKey) : null);
        }