public void Handle(ExpireOrder command)
        {
            var repo = this.repositoryFactory.Invoke();

            using (repo as IDisposable)
            {
                lock (lockObject)
                {
                    var saga = repo.Find <RegistrationProcessSaga>(command.Id);
                    saga.Handle(command);

                    repo.Save(saga);
                }
            }
        }
        public void Handle(ExpireOrder message)
        {
            if (this.State == SagaState.AwaitingPayment)
            {
                this.State = SagaState.Completed;

                this.AddCommand(new CancelSeatReservation
                {
                    ReservationId = this.ReservationId,
                    ConferenceId  = message.ConferenceId
                });
                this.AddCommand(new RejectOrder {
                    OrderId = message.OrderId
                });
            }

            // else ignore the message as it is no longer relevant (but not invalid)
        }
        public void Handle(ExpireOrder command)
        {
            var repo = this.repositoryFactory.Invoke();

            using (repo as IDisposable)
            {
                lock (lockObject)
                {
                    var saga = repo.Query <RegistrationProcessSaga>().FirstOrDefault(x => x.OrderId == command.OrderId);
                    if (saga != null)
                    {
                        saga.Handle(command);

                        repo.Save(saga);
                    }
                }
            }
        }