コード例 #1
0
        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();
        }