NCache 4.6 - Online Documentation

Using Output Cache With Custom Hooks

 
Using NCache output provider output of pages and controls is stored in cache. In some scenarios it can be very helpful if the page/control output can be grouped according to some x.y.z criteria before insertion into cache. Here to provide the user with further more control, NCache provides a concept of “hooks”. Hooks allow users to group output of pages/controls before its insertion into cache.
 
Following configuration changes are required:
 
<!-- caching section group -->
<caching>    
  <outputCache defaultProvider="NOutputCacheProvider">
    <providers>
<add name="NOutputCacheProvider" type="Alachisoft.NCache.OutputCacheProvider.NOutputCacheProvider, Alachisoft.NCache.OutputCacheProvider, Version=x.x.x.x, Culture=neutral, PublicKeyToken=null" exceptionsEnabled="false" enableLogs="true" cacheName="mypartitionofReplicaCache" writeExceptionsToEventLog="false" hookAssemblyName="OutputCache, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" hookClassName="Sample.OutputCacheProvider.OutputCacheHook.OutputCacheHookSample"/>
    </providers>
  </outputCache>
</caching>
 
 
Replace version “x.x.x.x” with the actual NCache version that you have.
 
How to Implement IOutputCacheHook
 
Output Cache with custom hooks allows grouping data before storing into cache. To implement IOutputCacheHook, create a class which extends IOutputCacheHook. The following tables list the properties and methods that  must be implemented.
 
Methods
Description
Initialize
Initializes required elements of Output Cache hook.
OnCachingOutput
 
Takes as input the HttpContext instance for the current request, string key and object value generated by framework for output are passed as is as input parameter. Input parameter CacheOperation type can be added or set, with respect to Output Cache Provider operations of add and set. DateTime utcExpiry is passed as a reference parameter which allows end user code to reset expiration for particular key value pair. If the value for expiration is not set, the default value provided by framework is used.
This method returns CacheMetadata which can have additional information about group, sub group, tag, named tag and dependency settings.
This method functions as a hook between OutputCache Provider and user code, it is called when output is generated by framework but before insertion into Cache thus allowing intermediate hook for user, where additional information can be added with CacheMetadata.
Dispose
It releases resources which are no longer in use by Output Cache hook.
 
 
Sample OutputCacheHook
 
      To utilize IOutputCacheHook interface, include the following namespaces in your application:
  • Alachisoft.NCache.OutputCacheProvider.OutputCacheHook.dll found in %NCache_dir%\integrations\OutputCacheProvider
  • System.Web found in C:\Windows\Microsoft.NET\Framework\v2.0.50727
 
    public class OutputCacheHookSample : IOutputCacheHook
    {
        public void Initialize()
        {
            //initialize required elements here, according to business logic.
        }
        public CacheMetadata OnCachingOutput(HttpContext context, string key, object value, CacheOperation operation, ref DateTime utcExpiry)
        {
            CacheMetadata cacheMetaData = null;
            if (context != null)
            {
                cacheMetaData = new CacheMetadata();
 
                //put required business logic to categorize input parameter key in desired group.
                //Groups, sub groups, tags, named tags and dependencies can be assigned to object of cacheMetaData
                //which is returned to be inserted into cache.
 
                cacheMetaData.GroupName = "vendorState";
                cacheMetaData.Dependency = new KeyDependency(key);
                utcExpiry = DateTime.Now.AddMinutes(5);
 
            }
            return cacheMetaData;
        }
        public void Dispose()
        {
            //dispose
        }
    }
 
 
See Also