/// <summary>Trys to extract immutable object from cache.</summary> /// <typeparam name="T">Type of presisted value.</typeparam> /// <param name="checksum">Checksum of the value that should be fetched.</param> /// <param name="value">The value that is returned from cache.</param> /// <returns>Returns true if found value in cache.</returns> /// <exception cref="ArgumentNullException">Throws System.ArgumentNullException if checksum is null.</exception> public bool TryGet <T>(Checksum checksum, out StoreResult <T> value) { if (checksum == null) { throw new ArgumentNullException(nameof(checksum)); } var key = checksum.ToString(); value = (StoreResult <T>) this.memoryCache.Get(key); return(value != null); }
/// <inheritdoc/> public bool Equals(StoreResult <T> other) { if (other == null) { return(false); } if (this.Contains != other.Contains) { return(false); } if (!this.Contains) { return(true); } return(this.presistedValue.Equals(other.GetPresistedValue())); }
/// <summary>Adds instance to cache.</summary> /// <typeparam name="T">Type of presisted value.</typeparam> /// <param name="value">Values that should be added to cache.</param> /// <returns>Returns value currently stored in cache.</returns> /// <exception cref="ArgumentNullException">Throws <see cref="ArgumentNullException"/> if value is null.</exception> /// <exception cref="ArgumentException">Throws <see cref="ArgumentException"/> if value did not have Contains set to true.</exception> public StoreResult <T> AddOrGet <T>(StoreResult <T> value) { if (value == null) { throw new ArgumentNullException(nameof(value)); } if (!value.Contains) { throw new ArgumentException("Contains was false.", nameof(value)); } var key = value.GetPresistedValue().Checksum.ToString(); var cacheValue = (StoreResult <T>) this.memoryCache.AddOrGetExisting(key, value, new CacheItemPolicy()); if (cacheValue == null) { return(value); } return(cacheValue); }