protected virtual void OnMiss(ICacheKey key, out object value)
 {
     if (Miss != null)
     {
         var args = new CacheEventArgs(key);
         Miss(this, args);
         value = args.Value;
     }
     else
     {
         value = null;
     }
 }
 protected virtual void OnHit(ICacheKey key, ref object value)
 {
     if (Hit != null)
     {
         var args = new CacheEventArgs(key, value);
         Hit(this, args);
         value = args.Value;
     }
 }