public void Dispose()
        {
            _cleaner.Dispose();

            //AggregateExceptionBuilder builder = new AggregateExceptionBuilder("Error while disposing the DataManager");
            //_cleaner.Stop();

            //var keys = _map.Keys;
            //var retries = 3;
            //for(var i=0;i<keys.Length;i++)
            //{
            //    var key = keys[i];
            //    var count = (_map[key].Provider as ContextProviderBase).ConsumerCount;
            //    var canRemove = false;

            //    if (count > 0)
            //    {
            //        switch (KPolicy.ManagerDisposeStrategy)
            //        {
            //            case ManagerDisposalStrategy.Default:
            //            case ManagerDisposalStrategy.DisposeButThrowIfInUse:
            //                builder.Add(new Exception($"Provider for thread {key} has {count} consumer(s)"));
            //                canRemove = true;
            //                break;

            //            case ManagerDisposalStrategy.FailIfNotDisposed:
            //                throw new Exception($"Context on thread {key} is still in use by {count} repositories");

            //            case ManagerDisposalStrategy.RetryUntilDisposedOrFail:
            //                Thread.Sleep(Convert.ToInt32(KPolicy.DisposalWait.TotalMilliseconds));
            //                i--; //Retry
            //                retries--;
            //                if (retries == 0)
            //                    throw new Exception($"Context on thread {key} is still in use by {count} repositories");
            //                break;

            //            case ManagerDisposalStrategy.DisposeSilentlyEvenIfInUse:
            //                canRemove = true;
            //                break;
            //        }
            //    }
            //    else
            //        canRemove = true;

            //    if (canRemove) {
            //        (_map.Remove(key) as IDisposable).Dispose();
            //        retries = KPolicy.RetryCount;
            //    }

            //}

            //if (builder.HasErrors)
            //    throw builder.ToAggregateException();
        }