Esempio n. 1
0
        /// <summary>
        /// Gets the item expiration.
        /// </summary>
        /// <param name="item">The item.</param>
        /// <returns>Returns the updated cache item.</returns>
        /// <exception cref="System.ArgumentNullException">If item is null.</exception>
        /// <exception cref="System.InvalidOperationException">
        /// If expiration mode is defined without timeout.
        /// </exception>
        protected virtual ICacheItem <TKey, TValue> GetItemExpiration(ICacheItem <TKey, TValue> item)
        {
            NotNull(item, nameof(item));

            // logic should be that the item setting overrules the handle setting if the item
            // doesn't define a mode (value is Default) it should use the handle's setting. if the
            // handle also doesn't define a mode (value is None|Default), we use None.
            var expirationMode    = ExpirationMode.Default;
            var expirationTimeout = TimeSpan.Zero;
            var useItemExpiration = item.ExpirationMode != ExpirationMode.Default && !item.UsesExpirationDefaults;

            if (useItemExpiration)
            {
                expirationMode    = item.ExpirationMode;
                expirationTimeout = item.ExpirationTimeout;
            }
            else if (Configuration.ExpirationMode != ExpirationMode.Default)
            {
                expirationMode    = Configuration.ExpirationMode;
                expirationTimeout = Configuration.ExpirationTimeout;
            }

            if (expirationMode == ExpirationMode.Default || expirationMode == ExpirationMode.None)
            {
                expirationMode    = ExpirationMode.None;
                expirationTimeout = TimeSpan.Zero;
            }
            else if (expirationTimeout == TimeSpan.Zero)
            {
                throw new InvalidOperationException("Expiration mode is defined without timeout.");
            }

            return(item.WithExpiration(expirationMode, expirationTimeout, !useItemExpiration));
        }