* Improved CacheAttribute initialization
* Fixed CacheManager registration of cache with any name ("*" with no-prefix) not working
* Removed unused field from aspect classes.
* Added DoNotIncludeInCacheKeyAttribute for marking specific parameters so that their values will not be a part of the key,
Example of usages:
a. Do not use a dbContext as part of a cache key.
b. Cache using object ID, not object value.
* Change policy for InMemoryCache to InMemoryPolicy enabling AbsoluteExpiration, ExpirationFromAdd, SlidingExpiration
* Added MongoDb based distributed cache with the above policy options
* Moved CacheKey generator from AopCaching to Core
* Added option to get auto-generated cache key (using CacheKey.GetKey()) to enable single item clear when using AopCaching
* Fixed NuGet package of MongoDbCaching - package was empty
* MongoDbCache - fixed race condition on initial get or add caused by using Add() instead of AddOrUpdate()
* MongoDbCache - added support for null values
* SystemRuntime.ObjectCache (InMemoryCache's base) - added support for null values
* Test initialization fix for AopCaching's tests
* RedisCache - added
* MongoDbCache - NuGet dependencies update
* MongoDbCache - small change for sliding expiration - removed unnecessary updates
* Core - added LayeredCache
* MongoDbCache - small code cleanup
* RedisCache - improved sliding expiration implementation - use GetOrSet() instead of Set() to clear previous expiration time
* WebApiExtended - added with basic cache controller
* Core - added CacheControllerUtil for enabling simple register, clear, refresh functionality
* Revamped WebApiExteneded to use CacheControllerUtil and name change
* Fixed route for cache controllers
* Check if parameter is null in GetCache(name)
* Fixed lifetime of cache registrations via CacheControllerUtil
* Added RegisterAllCaches functionality
* Bug fix for LambdaHelper: Add support for fields/properties as parameters in key generation expression
* Added built in cache notifications & synchronization
* Changed RedisCache to use StackExchange
* Implementation of notifier using Redis
* Revamped configuration for connection strings & notifications / synchronization
* Fixed unique key issue with AOP on generic methods or classes
* Fixed synchronizer/notifier + added test that spawns a test process (make sure Firewall/enSilo doesn't block it when running test)
* In order to enable clearing specific key when using the aspect CacheListAttribute,
Fixed CacheKey class key generation for methods with array/list parameters
- see test TestKeyGeneration_CacheList
* Added Converter options to RedisCache: json, bson, deflate, gzip
* Integration between WebAPI controller and Notifier to enable out of the box pub-sub
* Fix for RedisCache debug logs
* Added support for adding DoNotIncludeInCacheKeyAttribute to properties.
For this to work, the class DoNotIncludeInCacheKeyAttribute was moved from AopCaching to Core.Attributes,
which is a breaking change for clients of AopCaching using DoNotIncludeInCacheKeyAttribute
* Changed RedisConverterDeflate and RedisConverterGZip to compress JSON instead of BSON
* Updated Newtonsoft.Json (Json.net) from v6 to v11
* All other packages have not been changed
* Added async support for ICache and all implementations
* Fixed performance issue in CacheKey serialization
* Fixed deserialization issue when using RedisCache and AOP with various primitive types e.g. Int32
* Fixed connection issue when using RedisCache with a DNS
* Move the the logic of AOP safe casting to runtime (instead of compile time) to avoid a breaking change
* Fix DoNotIncludeInCacheKeyAttribute not effecting parameters
* Fix DoNotIncludeInCacheKeyAttribute in CacheListAttribute not working
* Update RedisCaching to StackExchange.Redis v2
* Change minimum .NET Framework version from 4.5 to 4.6.1 in all projects
* Added TryGetAsync implementation to RedisCache and made CacheContext async.
* Migrate NuGet projects to .Net standard
* Migrate all projects to new csproj
* Fixes due to NuGetPack.exe issues
* DoNotLock policy for SystemRuntime (InMemoryCache)
* Improved locking mechanism - using multiple SemaphoreSlim depending on cache and key's hash
* Improved locking mechanism - enable reentrant (recursive) calls without deadlocks
* CacheManager enhanced to enable support for .NET standard configuration (Microsoft.Extensions.Configuration)
* Configuration
- New cache configuration option: LoadPriority
default 1 to all cache types except Layered[Scoped]Cache which has default of 2
- cache/notifier/connectionstrings names are no longer cace sensitive (will throw exception on initialization if duplicate are detected)
* AOP
- If dependent cache is in inactive state (redis connection is lost...), invokes getter instead of throwing exception
* RedisClient
- Optimization: Reuse ConnectionMultiplexer when using RedisCache/SyncProvider
* RedisNotifier
- New optional policy: GeneralInvalidationChannel
- New method: TryPublish
* InMemory*Cache
- New optional policy: OnSyncProviderFailure
- Automatic Invalidation on SyncProvider state change
- Fallback expiry policy
* Redis*Cache
- New property: ICacheV2.IsActive => RedisClient.IsConnected
- Bug fix: Invalid AbsoluteExpiration handling
* LayeredCache
- New optional policy: InvalidateLevel1OnLevel2Upsert
* New IScopedCache (:ICache)
- TryGetScoped
- GetScoped
- SetScoped
- New property: ICacheV2.IsActive => RedisClient.IsConnected
* New cache types (implements ICache and IScopedCache)
- InMemoryScopedCache
- RedisScopedCache
- LayeredScopedCache
* ICacheV2 for cache types
- New behavior: Won't throw an exception is cache is inactive when used by AOP or by by cache implementing IScopedCache (RedisScopedCache)
* ICacheV2 for cache types
- New behevior: Expose state and censored configurations of cache
* WebApiExtended/.NETCore
- New optional parameter: IncludeConfiguration - now can serve state and censored configuration of defined cache
- New: CacheableActionFilterAttribute for an easy and consistant way to work with IScopedCache CacheDirectives
* New packages: WebApiExtended.Swashbuckle and WebApiExtended.NETCore.Swashbuckle
- Expose CacheDirectives for endpoints with CacheableActionFilterAttribute