/// <summary>
        /// Get the property value from the passed entry object.
        /// </summary>
        /// <param name="entry">
        /// The Entry object.
        /// </param>
        /// <returns>
        /// The property value.
        /// </returns>
        /// <seealso cref="IValueExtractor.Extract"/>
        protected virtual object Get(IInvocableCacheEntry entry)
        {
            IValueManipulator manipulator = m_manipulator;

            if (manipulator != null)
            {
                IValueExtractor extractor = manipulator.Extractor;
                if (extractor == null)
                {
                    throw new InvalidOperationException("The IValueManipulator ("
                                                        + manipulator + ") failed to provide an IValueExtractor");
                }
                else
                {
                    return(entry.Extract(extractor));
                }
            }
            return(entry.Value);
        }
 /// <summary>
 /// Process an <see cref="IInvocableCacheEntry"/>.
 /// </summary>
 /// <param name="entry">
 /// The <b>IInvocableCacheEntry</b> to process.
 /// </param>
 /// <returns>
 /// The result of the processing, if any.
 /// </returns>
 public override object Process(IInvocableCacheEntry entry)
 {
     return(entry.Extract(m_extractor));
 }