Raise an event on OnUnhandledEvent action

12 views
Skip to first unread message

Carmine

unread,
Nov 7, 2017, 9:03:33 AM11/7/17
to masstransit-discuss
Hi,

I'm building a saga and I want to send an event if an unxpected command/event arrives in any state.

I wrote a saga like this but while the OnUnhandledEvent is correctly called the "DuringAny" isn't called after the "Raise" method, so the InvalideStateOperationEvent isn't published.

Any ideas?

Thanks

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; }
    }



Reply all
Reply to author
Forward
0 new messages