Class EventsResultHandler

Namespace
Cratis.Chronicle.Reactors.SideEffects
Assembly
Cratis.Chronicle.dll

Handles a collection of event objects returned from a reactor handler method. Each event is appended to the event log using metadata resolved from the ReactorContext.

[Singleton]
public class EventsResultHandler : IReactorSideEffectHandler
Inheritance
EventsResultHandler
Implements
Inherited Members
Extension Methods

Remarks

The compatibility constructor retains the previous public surface for callers that create the handler directly. Chronicle explicitly registers this type once per event-store scope using that constructor before convention binding runs. Cached event stores use the parameterless constructor and pass their registry through the additive CanHandle overload instead.

Constructors

EventsResultHandler()

Initializes a new instance of the EventsResultHandler class for the current per-store contract.

public EventsResultHandler()

EventsResultHandler(IEventTypes)

Initializes a new instance of the EventsResultHandler class for compatibility with the previous event-store-less contract.

public EventsResultHandler(IEventTypes eventTypes)

Parameters

eventTypes IEventTypes

IEventTypes used when the event-store-less CanHandle overload is called without a current event store on its ReactorContext.

Methods

CanHandle(ReactorContext, IEventStore, object)

Determines whether this handler can process the given return value.

public bool CanHandle(ReactorContext reactorContext, IEventStore eventStore, object value)

Parameters

reactorContext ReactorContext

The ReactorContext for the reactor invocation.

eventStore IEventStore

The IEventStore the reactor is running under.

value object

The value returned by the reactor handler method.

Returns

bool

true if this handler can process the value; otherwise false.

Remarks

The event store is passed per call rather than captured, because everything it exposes — the event type registry in particular — belongs to the namespace the resolving scope named. A handler that holds one is answering for whichever namespace happened to build it first.

Defaults to the event-store-less overload so a handler written against the previous contract keeps working unchanged. Implementations that need event-store-specific state can override this overload while retaining the previous one for callers compiled against the published contract.

CanHandle(ReactorContext, object)

Determines whether this handler can process the given return value.

public bool CanHandle(ReactorContext reactorContext, object value)

Parameters

reactorContext ReactorContext

The ReactorContext for the reactor invocation.

value object

The value returned by the reactor handler method.

Returns

bool

true if this handler can process the value; otherwise false.

Handle(ReactorContext, IEventStore, object)

Processes the return value, typically by appending one or more events to an event sequence.

public Task<Result<ReactorSideEffectFailure>> Handle(ReactorContext reactorContext, IEventStore eventStore, object value)

Parameters

reactorContext ReactorContext

The ReactorContext for the reactor invocation.

eventStore IEventStore

The IEventStore to use for appending events.

value object

The value returned by the reactor handler method.

Returns

Task<Result<ReactorSideEffectFailure>>

A Task representing the asynchronous operation.