This sample demonstrates three approaches for handling projection change invalidation signals
from EventStore via SignalR. Each pattern uses the EventStoreSignalRClient to
subscribe to the "changed" signal — a notification that contains only
(projectionType, tenantId) with no data payload. Patterns must re-query the
EventStore to get updated data.
Pattern | UX Impact | Implementation Effort | Best Use Case |
|---|---|---|---|
| 1: Notification | Least disruptive — user controls refresh | Low | Dashboards, admin panels |
| 2: Silent Reload | Refreshes seamlessly after received signals | Low | Live monitoring, counters |
| 3: Selective Refresh | Best — only affected components update | Medium | Complex dashboards, multi-panel UIs |
dotnet run --project src/Hexalith.EventStore.AppHostEventStore:SignalR:Enabled = true). The Aspire topology
configures this automatically.
tenant-a. When Keycloak is enabled, it requests a demo token
using the Aspire-wired realm configuration.