MediatR.Caching
1.0.0-alpha.0.6
dotnet add package MediatR.Caching --version 1.0.0-alpha.0.6
NuGet\Install-Package MediatR.Caching -Version 1.0.0-alpha.0.6
<PackageReference Include="MediatR.Caching" Version="1.0.0-alpha.0.6" />
<PackageVersion Include="MediatR.Caching" Version="1.0.0-alpha.0.6" />
<PackageReference Include="MediatR.Caching" />
paket add MediatR.Caching --version 1.0.0-alpha.0.6
#r "nuget: MediatR.Caching, 1.0.0-alpha.0.6"
#:package MediatR.Caching@1.0.0-alpha.0.6
#addin nuget:?package=MediatR.Caching&version=1.0.0-alpha.0.6&prerelease
#tool nuget:?package=MediatR.Caching&version=1.0.0-alpha.0.6&prerelease
MediatR.Caching
MediatR.Caching is a DotNetCore library that provides support for caching MediatR IRequest<T>
responses. It also includes support for invalidating cache results using MediatR commands.
Features
- Cache responses of MediatR
IRequest<T>
queries using any supported IDistributedCache provider. - Invalidate cached responses using MediatR commands.
- Easy integration with existing MediatR setup.
- Configurable caching strategies.
Installation
You can install the package via NuGet:
dotnet add package MediatR.Caching
Usage
Caching Requests
Assuming the following model and request:
public record Model
{
public int Id { get; init; }
public string Title { get; init; }
public int Credits { get; init; }
[Display(Name = "Department")]
public string DepartmentName { get; init; }
}
public record Query : IRequest<Model>
{
public int? Id { get; init; }
}
To cache MediatR request responses, you can either use attributes like so:
[Cache(SlidingExpiration = 1, AbsoluteExpiration = 5)]
public record Query : IRequest<Model>
{
public int? Id { get; init; }
}
Or, define a CachePolicy for your request like so:
// This could be in the same file as your handler or in a separate file.
public class CachePolicy : ICachePolicy<Query, Model>
{
// Optionally, change defaults
public TimeSpan? AbsoluteExpirationRelativeToNow => TimeSpan.FromMinutes(10);
public TimeSpan? SlidingExpiration => TimeSpan.FromMinutes(1);
// Optionally, provide a different implementation here. By default the CacheKey will be in the following format:
// Query{Id:123}
public string GetCacheKey(Query query)
{
return $"Your-Custom-Cache-Key";
}
}
Invalidating Cache
To invalidate a cached response, you can mark your commands with the InvalidateCache attribute like so:
[InvalidateCache(typeof(Query))]
public class Command : IRequest
{
[Display(Name = "Number")]
public int Id { get; init; }
public string Title { get; init; }
public int? Credits { get; init; }
public Department Department { get; init; }
}
Or, define a CacheInvalidationPolicy like so:
public class CacheInvalidationPolicy(IEnumerable<ICachePolicy<CachingWithPoliciesModel.Query, CachingWithPoliciesModel.Result>> cachePolicies)
: AbstractCacheInvalidationPolicy<Query, CachingWithPoliciesModel.Query, CachingWithPoliciesModel.Result>(cachePolicies);
Configuration
Register the caching behavior in your Startup.cs
or wherever you configure MediatR:
services.AddMediatR(typeof(Startup));
services.AddMediatRCaching();
Ensure you also have an IDistributedCache registered or a default MemoryCache will be registered.
// MemoryCache (this is the default that will get registered if none provided)
services.AddDistributedMemoryCache();
// Sql Server Cache
services.AddDistributedSqlServerCache(options =>
{
options.ConnectionString =
Configuration.GetConnectionString("Cache");
options.SchemaName = "dbo";
options.TableName = "Cache";
});
// Redis Cache
services.AddStackExchangeRedisCache(options =>
{
options.Configuration = "localhost";
options.InstanceName = "SampleInstance";
});
License
This project is licensed under the MIT License.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- MediatR (>= 12.4.1)
- Microsoft.CSharp (>= 4.7.0)
- Microsoft.Extensions.Caching.Abstractions (>= 9.0.3)
- Microsoft.Extensions.Configuration.Abstractions (>= 9.0.3)
- Microsoft.Extensions.Logging.Abstractions (>= 9.0.3)
- Scrutor (>= 6.0.1)
- System.Text.Json (>= 9.0.3)
-
net6.0
- MediatR (>= 12.4.1)
- Microsoft.CSharp (>= 4.7.0)
- Microsoft.Extensions.Caching.Abstractions (>= 9.0.3)
- Microsoft.Extensions.Configuration.Abstractions (>= 9.0.3)
- Microsoft.Extensions.Logging.Abstractions (>= 9.0.3)
- Scrutor (>= 6.0.1)
- System.Text.Json (>= 9.0.3)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last Updated |
---|---|---|
1.0.0-alpha.0.6 | 464 | 3/25/2025 |
1.0.0-alpha.0.5 | 453 | 3/25/2025 |
1.0.0-alpha.0.4 | 455 | 3/25/2025 |
1.0.0-alpha.0.3 | 456 | 3/25/2025 |
1.0.0-alpha.0.2 | 456 | 3/25/2025 |
0.0.0-alpha.0.32 | 454 | 3/25/2025 |
0.0.0-alpha.0.31 | 452 | 3/25/2025 |