public class SagaTest : MassTransitStateMachine<SagaTestState>
{
public SagaTest()
{
InstanceState(x => x.CurrentState);
Event(() => SaveDraft, x => x.CorrelateBy((s, m) => s.CorrelationId == m.Message.CorrelationId));
Event(() => Publish, x => x.CorrelateBy((s, m) => s.CorrelationId == m.Message.CorrelationId));
Event(() => InvalidEventArrivedSagaEvent, x => x.CorrelateBy((s, m) => "StartReview" == m.Message.EventName));
OnUnhandledEvent(l => l.Raise(InvalidEventArrivedSagaEvent, new InvalidEventArrived(l.Instance.CorrelationId,
l.Event.Name)));
DuringAny(
When(InvalidEventArrivedSagaEvent)
.Publish(c => new InvalideStateOperationEvent(c.Instance.CorrelationId, c.Instance.CurrentState, c.Data.EventName)));
Initially(
When(SaveDraft)
.TransitionTo(StateA));
During(StateA,
When(Publish)
.Publish(c => new Published(c.Instance.CorrelationId))
.TransitionTo(Published));
}
#region Commands
public Event<SaveDraft> SaveDraft { get; private set; }
public Event<Publish> Publish { get; private set; }
public Event<InvalidEventArrived> InvalidEventArrivedSagaEvent { get; private set; }
#endregion
#region State
public State StateA { get; private set; }
public State Published { get; private set; }
#endregion
}
public class SagaTestState : SagaStateMachineInstance, IVersionedSaga
{
[BsonId]
public Guid CorrelationId { get; set; }
public int Version { get; set; }
}