Repository navigation
Release v19.14.0
Added
IProjections.Register<TReadModel>(define, id)registers a read model together with a declarative projection defined through the sameIProjectionBuilderFor<TReadModel>anIProjectionFor<T>uses, without assembly discovery. The read model behaves like any other throughIReadModels, 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 => ...)andIReactors.Register(id, reactor => ...)declare reactors fluently with typedOn<TEvent>handlers —(TEvent),(TEvent, EventContext)and theirTask-returning forms — and a catch-allSubscribe((object, EventContext) => ...).IReactorDefinitionexposes the reactor id, event types and whether it subscribes to all events (#4288)ChronicleOptions.ExplicitArtifactsregisters 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.