public ClearingSaga(IClearingApi clearingApi) { _clearingApi = clearingApi; InstanceState(x => x.CurrentState); Initially(When(Authorization) .TransitionTo(Authorizing) .Then(context => context.GetOrAddPayload(() => _clearingApi.ProcessRequest(context.Data))) .Respond(context => context.GetPayload <AuthorizationResponse>()) .Then(context => { AuthorizationResponse response; if (context.TryGetPayload(out response) && response.ClearingStatus == ClearingStatus.Rejected) { this.RaiseEvent(context.Instance, Rejected); } })); During(Authorizing, When(Rejected) .Finalize(), When(Settlement) .TransitionTo(Settling) .Respond(context => _clearingApi.ProcessRequest(context.Data)) .Finalize()); SetCompletedWhenFinalized(); }