Guia — ICacheProvider

Um cache novo, ativado por provider: num spec.caches. Só existe um recurso de cache por aplicação — a rota nunca precisa apontar para qual, só declara cache:.

Exemplo mínimo

using System.Text.Json.Nodes;
using Pipevine.Abstractions;
using Pipevine.Caching.Abstractions;

// A chave usada no YAML: `provider: acmecache`
[Provider("acmecache", ProviderKind.Cache)]
public sealed class AcmeCacheProvider : ICacheProvider
{
    public ValueTask<JsonNode?> GetAsync(string key, CancellationToken ct) { /* ... */ }

    public ValueTask SetAsync(string key, JsonNode value, CacheEntryOptions options, CancellationToken ct)
    {
        // options.AbsoluteTtl / options.SlidingTtl podem ser null (sem expiração).
        // options.Tags alimenta RemoveByTagAsync.
    }

    public ValueTask RemoveAsync(string key, CancellationToken ct) { /* ... */ }

    public ValueTask RemoveByTagAsync(string tag, CancellationToken ct) { /* ... */ }
}

Ativação

spec:
  caches:
    - { id: main, provider: acmecache }

routes:
  - id: getItem
    cache:
      key: "'item:' & input.route.itemId"
      ttl: 1m
      tags: [items]
services.AddKeyedSingleton<ICacheProvider, AcmeCacheProvider>("acmecache");
// mais services.AddPipevineCaching() do core

Um provider que não suporta invalidação por tag declara isso na própria documentação — o build só avisa se o YAML usar tags:, não falha.

Para onde ir daqui