/// <summary>
 /// .ctor
 /// </summary>
 /// <param name="readOnlyCacheSession">Backing ReadOnlyCacheSession for content and fingerprint calls</param>
 /// <param name="cache">Backing cache.</param>
 /// <param name="cacheId">Id of the parent cache that spawned the session.</param>
 /// <param name="logger">Diagnostic logger</param>
 /// <param name="sessionId">Telemetry ID for the session.</param>
 public MemoizationStoreAdapterCacheReadOnlySession(
     IReadOnlyCacheSession readOnlyCacheSession,
     BuildXL.Cache.MemoizationStore.Interfaces.Caches.ICache cache,
     string cacheId,
     ILogger logger,
     string sessionId = null)
 {
     ReadOnlyCacheSession = readOnlyCacheSession;
     Cache          = cache;
     Logger         = logger;
     CacheId        = cacheId;
     CacheSessionId = sessionId;
     SessionEntries = sessionId == null ? null : new ConcurrentDictionary <StrongFingerprint, int>();
 }
        /// <summary>
        ///     Initializes a new instance of the <see cref="ReadOnlyDistributedCacheSession" /> class.
        /// </summary>
        public ReadOnlyDistributedCacheSession(
            ILogger logger,
            string name,
            IReadOnlyCacheSession innerCacheSession,
            Guid innerCacheId,
            IMetadataCache metadataCache,
            DistributedCacheSessionTracer tracer,
            ReadThroughMode readThroughModeMode)
        {
            Contract.Requires(logger != null);
            Contract.Requires(innerCacheSession != null);
            Contract.Requires(metadataCache != null);

            Logger             = logger;
            Name               = name;
            MetadataCache      = metadataCache;
            _innerCacheSession = innerCacheSession;
            _innerCacheId      = innerCacheId;
            DistributedTracer  = tracer;
            _readThroughMode   = readThroughModeMode;
        }