Skip to content

Release v19.14.0

Choose a tag to compare

@github-actions github-actions released this 28 Sep 04:02
ab20987

Added

  • IProjections.Register<TReadModel>(define, id) registers a read model together with a declarative projection defined through the same IProjectionBuilderFor<TReadModel> an IProjectionFor<T> uses, without assembly discovery. The read model behaves like any other through IReadModels, including passive (on-demand) read models (#4287)
  • IProjections.Register<TReadModel>() registers the model-bound projection of a read model that discovery did not find (#4287)
  • IReactors.Define(id, reactor => ...) and IReactors.Register(id, reactor => ...) declare reactors fluently with typed On<TEvent> handlers — (TEvent), (TEvent, EventContext) and their Task-returning forms — and a catch-all Subscribe((object, EventContext) => ...). IReactorDefinition exposes the reactor id, event types and whether it subscribes to all events (#4288)
  • ChronicleOptions.ExplicitArtifacts registers explicit projections, read models and fluent reactors before the client connects; they are included in every registration pass, including after a reconnect (#4287, #4288)

Explicitly registered projections and fluent reactors use the same observer, projection and reactor infrastructure as discovered ones — state, failed partitions and replay all behave the same. A catch-all Subscribe expands to every event type the client knows when the reactor is defined.

Validation: 3,327 client specs pass; 8 new integration specs against the real kernel pass (active and passive explicit read models, typed and catch-all fluent reactors). This is the Chronicle foundation for EventSourcedStateMachine in Cratis/Orleans#34.