Dependency injection
Respire.Extensions.DependencyInjection registers IRespireClient with lazy connection behavior. Application startup does not wait for Redis availability.
Register a default client
Add project references while Respire remains pre-release:
dotnet add reference path/to/Respire/src/Respire/Respire.csproj
dotnet add reference path/to/Respire/src/Respire.Extensions.DependencyInjection/Respire.Extensions.DependencyInjection.csproj
Register a connection string:
builder.Services.AddRespire(
builder.Configuration.GetConnectionString("redis")!);
Inject IRespireClient:
public sealed class SessionStore(IRespireClient redis)
{
public ValueTask<Session?> GetAsync(string id, CancellationToken ct) =>
redis.GetAsync<Session>($"session:{id}", ct);
}
The container owns disposal.
Named clients
Use keyed services when an application talks to separate endpoints:
builder.Services.AddKeyedRespire("sessions", "redis://sessions-host");
builder.Services.AddKeyedRespire("jobs", "redis://jobs-host");
public sealed class CartService(
[FromKeyedServices("sessions")] IRespireClient sessions)
{
public ValueTask<string?> GetAsync(string id, CancellationToken ct) =>
sessions.GetStringAsync($"cart:{id}", ct);
}
Configure options
Use the options overload when you need explicit timeouts, connection counts, serialization, or logging. Keep secrets in configuration providers; do not embed credentials in source.
builder.Services.AddRespire(options =>
{
options.Endpoints.Add(new RespireEndpoint("redis.internal"));
options.CommandTimeout = TimeSpan.FromSeconds(2);
options.Connections = 2;
options.UseClientSideCaching();
});
Default registrations and each service key may be added only once. A duplicate registration throws immediately instead of silently retaining the first configuration.
For ASP.NET Core cache abstractions, continue to caching integrations.