Przejdź do treści

TailoredApps.Shared.MediatR.Caching

NuGet License: MIT


Opis

Lekki pakiet definiujący ICachableRequest<TResponse> — marker interface dla requestów MediatR, których wyniki mają być cache'owane. Request implementujący ten interfejs dostarcza metodę GetCacheKey(), która generuje unikalny klucz cache dla danej instancji zapytania.

Jest to alternatywne podejście do cache'owania w porównaniu z ICachePolicy<TRequest, TResponse> z pakietu TailoredApps.Shared.MediatR — prostsze, gdy logika klucza cache jest prosta i może żyć w samym requeście.


Instalacja

dotnet add package TailoredApps.Shared.MediatR.Caching

Przykład użycia

using TailoredApps.Shared.MediatR.Caching;
using MediatR;

// Request z wbudowaną logiką cache key
public class GetUserProfileQuery : ICachableRequest<UserProfileDto>
{
    public int UserId { get; set; }
    public string Language { get; set; } = "pl";

    // Unikalny klucz uwzględniający parametry zapytania
    public string GetCacheKey() => $"user-profile:{UserId}:{Language}";
}

// Handler — standardowy MediatR
public class GetUserProfileQueryHandler : IRequestHandler<GetUserProfileQuery, UserProfileDto>
{
    private readonly IUserRepository _repo;

    public GetUserProfileQueryHandler(IUserRepository repo) => _repo = repo;

    public async Task<UserProfileDto> Handle(GetUserProfileQuery request, CancellationToken ct)
    {
        var user = await _repo.GetByIdAsync(request.UserId, ct);
        return user.ToProfileDto(request.Language);
    }
}

Integracja z CachingBehavior

Aby cache'owanie działało, potrzebujesz CachingBehavior z pakietu TailoredApps.Shared.MediatR w pipeline. ICachableRequest to marker interface — sam w sobie nie uruchamia cache'owania.


API Reference

Typ Rodzaj Opis
ICachableRequest<TResponse> Interfejs Rozszerza IRequest<TResponse>; wymaga GetCacheKey()
ICachableRequest.GetCacheKey() Metoda Zwraca unikalny klucz cache dla tej instancji requestu

🤖 AI Agent Prompt

## TailoredApps.Shared.MediatR.Caching — Instrukcja dla agenta AI

Używasz ICachableRequest do oznaczania requestów MediatR, których wyniki mają być cache'owane.

### Użycie
```csharp
public class GetProductQuery : ICachableRequest<ProductDto>
{
    public int Id { get; set; }
    public string GetCacheKey() => $"product:{Id}";
}

Zasady

  • ICachableRequest rozszerza IRequest
  • GetCacheKey() musi zwracać unikalny klucz dla tej kombinacji parametrów
  • Sam interfejs nie cache'uje — potrzebny CachingBehavior z TailoredApps.Shared.MediatR
  • Alternatywa: ICachePolicy — klucz w osobnej klasie policy ```