SagaApiType

PackageFCQRS
Low-level C# saga API (mirrors ActorApi/QueryApi). For most sagas, prefer the Saga<_,_,_> base class, which wraps this.

Specification

Kind
Type
Members
7
Examples
0
FactorySignature
SagaApi.Factory(actorApi, sagaEntityFac, entityId)
InitSignature
SagaApi.Init(actorApi, sagaData, handleEvent, applySideEffects, originatorFactory, sagaName)
InitSignature
SagaApi.Init(actorApi, sagaData, handleEvent, applySideEffects, apply, originatorFactory, sagaName)
InitSignature
SagaApi.Init(actorApi, sagaData, handleEvent, applySideEffects, apply, originatorFactory, sagaName, snapshotPolicy)
InitSignature
SagaApi.Init(actorApi, sagaData, handleEvent, applySideEffects, apply, originatorFactory, sagaName)

Summary

NameSignatureSynopsis
FactorySagaApi.Factory(actorApi, sagaEntityFac, entityId)Get the factory for a saga
InitSagaApi.Init(actorApi, sagaData, handleEvent, applySideEffects, originatorFactory, sagaName)Initialize a saga without apply (no data updates based on state)
InitSagaApi.Init(actorApi, sagaData, handleEvent, applySideEffects, apply, originatorFactory, sagaName)Initialize a saga with simplified apply - just takes data and unwrapped state, returns new data
InitSagaApi.Init(actorApi, sagaData, handleEvent, applySideEffects, apply, originatorFactory, sagaName, snapshotPolicy)Initialize a saga with an explicit per-saga snapshot policy.
InitSagaApi.Init(actorApi, sagaData, handleEvent, applySideEffects, apply, originatorFactory, sagaName)Initialize a saga with C# delegates 'TEvent - The triggering event type (from the originator aggregate) 'TSagaData - Cross-cutting saga data 'TSagaState - User-defined saga states
InitSimpleSagaApi.InitSimple(actorApi, sagaData, handleEvent, applySideEffects, originatorFactory, sagaName)Initialize a saga with simplified signatures and no apply.
InitSimpleSagaApi.InitSimple(actorApi, sagaData, handleEvent, applySideEffects, apply, originatorFactory, sagaName)Initialize a saga with simplified signatures - no FSharpOption, typed events handleEvent: (event, data, currentState) -> EventAction applySideEffects: (data, state, recovering) -> SagaSideEffectResult LIMITATION: the typed handler only receives the originator's Event<'TEvent>.

Factory

SagaApi.Factory(actorApi, sagaEntityFac, entityId)
Member
Get the factory for a saga

Parameters

NameTypeDescription
actorApiIActor
sagaEntityFacEntityFac<obj>
entityIdstring

Returns

IEntityRef<obj>

Init

SagaApi.Init(actorApi, sagaData, handleEvent, applySideEffects, originatorFactory, sagaName)
Member
Initialize a saga without apply (no data updates based on state)

Parameters

NameTypeDescription
actorApiIActor
sagaData'TSagaData
handleEventFunc<obj, SagaState<'TSagaData, 'TSagaState option>, EventAction<'TSagaState>>
applySideEffectsFunc<SagaState<'TSagaData, 'TSagaState>, bool, SagaSideEffectResult<'TSagaState>>
originatorFactoryAggregateFactory
sagaNamestring

Returns

EntityFac<obj>

Init

SagaApi.Init(actorApi, sagaData, handleEvent, applySideEffects, apply, originatorFactory, sagaName)
Member
Initialize a saga with simplified apply - just takes data and unwrapped state, returns new data

Parameters

NameTypeDescription
actorApiIActor
sagaData'TSagaData
handleEventFunc<obj, SagaState<'TSagaData, 'TSagaState option>, EventAction<'TSagaState>>
applySideEffectsFunc<SagaState<'TSagaData, 'TSagaState>, bool, SagaSideEffectResult<'TSagaState>>
applyFunc<'TSagaData, 'TSagaState, 'TSagaData>
originatorFactoryAggregateFactory
sagaNamestring

Returns

EntityFac<obj>

Init

SagaApi.Init(actorApi, sagaData, handleEvent, applySideEffects, apply, originatorFactory, sagaName, snapshotPolicy)
Member
Initialize a saga with an explicit per-saga snapshot policy.

Parameters

NameTypeDescription
actorApiIActor
sagaData'TSagaData
handleEventFunc<obj, SagaState<'TSagaData, 'TSagaState option>, EventAction<'TSagaState>>
applySideEffectsFunc<SagaState<'TSagaData, 'TSagaState>, bool, SagaSideEffectResult<'TSagaState>>
applyFunc<SagaState<'TSagaData, SagaStateWrapper<'TSagaState, 'TEvent>>, SagaState<'TSagaData, SagaStateWrapper<'TSagaState, 'TEvent>>>
originatorFactoryAggregateFactory
sagaNamestring
snapshotPolicySnapshotPolicy

Returns

EntityFac<obj>

Init

SagaApi.Init(actorApi, sagaData, handleEvent, applySideEffects, apply, originatorFactory, sagaName)
Member
Initialize a saga with C# delegates 'TEvent - The triggering event type (from the originator aggregate) 'TSagaData - Cross-cutting saga data 'TSagaState - User-defined saga states

Parameters

NameTypeDescription
actorApiIActor
sagaData'TSagaData
handleEventFunc<obj, SagaState<'TSagaData, 'TSagaState option>, EventAction<'TSagaState>>
applySideEffectsFunc<SagaState<'TSagaData, 'TSagaState>, bool, SagaSideEffectResult<'TSagaState>>
applyFunc<SagaState<'TSagaData, SagaStateWrapper<'TSagaState, 'TEvent>>, SagaState<'TSagaData, SagaStateWrapper<'TSagaState, 'TEvent>>>
originatorFactoryAggregateFactory
sagaNamestring

Returns

EntityFac<obj>

InitSimple

SagaApi.InitSimple(actorApi, sagaData, handleEvent, applySideEffects, originatorFactory, sagaName)
Member
Initialize a saga with simplified signatures and no apply. Same limitation as the other InitSimple overload: only the originator's Event&lt;'TEvent&gt; reaches the typed handler; ToSelf timeouts and other aggregates' replies require the obj-based Init overloads.

Parameters

NameTypeDescription
actorApiIActor
sagaData'TSagaData
handleEventFunc<Event<'TEvent>, 'TSagaData, 'TSagaState, EventAction<'TSagaState>>
applySideEffectsFunc<'TSagaData, 'TSagaState, bool, SagaSideEffectResult<'TSagaState>>
originatorFactoryAggregateFactory
sagaNamestring

Returns

EntityFac<obj>

InitSimple

SagaApi.InitSimple(actorApi, sagaData, handleEvent, applySideEffects, apply, originatorFactory, sagaName)
Member
Initialize a saga with simplified signatures - no FSharpOption, typed events handleEvent: (event, data, currentState) -> EventAction applySideEffects: (data, state, recovering) -> SagaSideEffectResult LIMITATION: the typed handler only receives the originator's Event&lt;'TEvent&gt;. ToSelf/ToSelfAfter payloads and other aggregates' reply events cannot reach it (they are logged and ignored) — sagas needing timeouts or multi-aggregate orchestration must use the obj-based Init overloads.

Parameters

NameTypeDescription
actorApiIActor
sagaData'TSagaData
handleEventFunc<Event<'TEvent>, 'TSagaData, 'TSagaState, EventAction<'TSagaState>>
applySideEffectsFunc<'TSagaData, 'TSagaState, bool, SagaSideEffectResult<'TSagaState>>
applyFunc<'TSagaData, 'TSagaState, 'TSagaData>
originatorFactoryAggregateFactory
sagaNamestring

Returns

EntityFac<obj>