/// <summary>
        /// Adds the specified toCache to this cache under the key specified for the duration specified and assigns the tag specified to it.
        /// </summary>
        /// <param name="key">The key.</param>
        /// <param name="toCache">The resultset to cache</param>
        /// <param name="duration">The duration how long the resultset will stay in the cache.</param>
        /// <param name="overwriteIfPresent">if set to <c>true</c> it will replace an existing cached set with the one specified.</param>
        /// <param name="tag">The tag under which the resultset has to be cached.</param>
        public void Add(CacheKey key, CachedResultset toCache, TimeSpan duration, bool overwriteIfPresent, string tag)
        {
            var keyToUse    = _keyStore.GetPersistentCacheKey(key, duration, tag);
            var policyToUse = ProduceCacheItemPolicy(duration);

            if (overwriteIfPresent)
            {
                _memoryCache.Set(keyToUse, toCache, policyToUse);
            }
            else
            {
                _memoryCache.Add(keyToUse, toCache, policyToUse);
            }
        }
 /// <summary>
 /// Adds the specified toCache to this cache under the key specified for the duration specified
 /// </summary>
 /// <param name="key">The key.</param>
 /// <param name="toCache">The resultset to cache</param>
 /// <param name="duration">The duration how long the resultset will stay in the cache.</param>
 /// <remarks>
 /// If an object is already present under 'key', Add is a no-op.
 /// </remarks>
 public void Add(CacheKey key, CachedResultset toCache, TimeSpan duration)
 {
     Add(key, toCache, duration, false, string.Empty);
 }
 /// <summary>
 /// Adds the specified toCache to this cache under the key specified for the duration specified
 /// </summary>
 /// <param name="key">The key.</param>
 /// <param name="toCache">The resultset to cache</param>
 /// <param name="duration">The duration how long the resultset will stay in the cache.</param>
 /// <param name="overwriteIfPresent">if set to <c>true</c> it will replace an existing cached set with the one specified.</param>
 public void Add(CacheKey key, CachedResultset toCache, TimeSpan duration, bool overwriteIfPresent)
 {
     Add(key, toCache, duration, overwriteIfPresent, string.Empty);
 }
 /// <summary>
 /// Adds the specified toCache to this cache under the key specified for the duration specified and assigns the tag specified to it.
 /// </summary>
 /// <param name="key">The key.</param>
 /// <param name="toCache">The resultset to cache</param>
 /// <param name="duration">The duration how long the resultset will stay in the cache.</param>
 /// <param name="overwriteIfPresent">if set to <c>true</c> it will replace an existing cached set with the one specified.</param>
 /// <param name="tag">The tag under which the resultset has to be cached.</param>
 public void Add(CacheKey key, CachedResultset toCache, TimeSpan duration, bool overwriteIfPresent, string tag)
 {
     var keyToUse = _keyStore.GetPersistentCacheKey(key, duration, tag);
     var policyToUse = ProduceCacheItemPolicy(duration);
     if(overwriteIfPresent)
     {
         _memoryCache.Set(keyToUse, toCache, policyToUse);
     }
     else
     {
         _memoryCache.Add(keyToUse, toCache, policyToUse);
     }
 }
 /// <summary>
 /// Adds the specified toCache to this cache under the key specified for the duration specified
 /// </summary>
 /// <param name="key">The key.</param>
 /// <param name="toCache">The resultset to cache</param>
 /// <param name="duration">The duration how long the resultset will stay in the cache.</param>
 /// <param name="overwriteIfPresent">if set to <c>true</c> it will replace an existing cached set with the one specified.</param>
 public void Add(CacheKey key, CachedResultset toCache, TimeSpan duration, bool overwriteIfPresent)
 {
     Add(key, toCache, duration, overwriteIfPresent, string.Empty);
 }
 /// <summary>
 /// Adds the specified toCache to this cache under the key specified for the duration specified
 /// </summary>
 /// <param name="key">The key.</param>
 /// <param name="toCache">The resultset to cache</param>
 /// <param name="duration">The duration how long the resultset will stay in the cache.</param>
 /// <remarks>
 /// If an object is already present under 'key', Add is a no-op.
 /// </remarks>
 public void Add(CacheKey key, CachedResultset toCache, TimeSpan duration)
 {
     Add(key, toCache, duration, false, string.Empty);
 }