public void OnBeforeItemSavedToCache(IDataCache dataCache, string key, object data)
        {
            // EXPECTS PROPERLY FORMATED CACHE KEYS
            try
            {
                List <string> orderedKeys = dataCache.CacheKeys.OrderBy(x => x).ToList();

#if DEBUG
                /*
                 * Container.Track.LogTrace(string.Format("<Cache Details: {0} - {1}>", dataCache.CacheKeys.Length, dataCache.CacheCount));
                 * foreach(var item in orderedKeys)
                 * {
                 *  Container.Track.LogTrace(string.Format("     {0}", item));
                 * }
                 * Container.Track.LogTrace(string.Format("</Cache Details>"));
                 */
#endif

                if (dataCache.CacheCount > this.MaximumKeyCount)
                {
                    // simple strategy to try to trim from both directions
                    _direction = !_direction;
                    if (!_direction)
                    {
                        orderedKeys.Reverse();
                    }

                    string[] keys     = dataCache.CacheKeys;
                    int      keyIndex = -1;
                    for (int i = 0; i < this.RemoveKeyBufferCount; i++)
                    {
                        if (orderedKeys.Count > 0)
                        {
                            string itemToRemove = string.Empty;

                            while (keyIndex < orderedKeys.Count)
                            {
                                keyIndex++;
                                string item = orderedKeys[keyIndex];
                                if (!item.Contains("?") && !key.Contains(item) && key != item)
                                {
                                    itemToRemove = item;
                                    break;
                                }
                            }

                            if (!string.IsNullOrEmpty(itemToRemove))
                            {
                                //Container.Track.LogTrace(string.Format(" ----> Removed From Cache: {0}", itemToRemove));
                                dataCache.ClearWithPrefix(itemToRemove);
                            }
                        }
                    }
                }
            }
            catch
            {
            }
        }
 public void OnBeforeItemSavedToCache(IDataCache dataCache, string key, object data)
 {
     if (this.ClearPrefixes.ContainsKey(key))
     {
         string prefix = this.ClearPrefixes[key];
         this.ClearPrefixes.Remove(key);
         dataCache.ClearWithPrefix(prefix);
     }
 }