Ejemplo n.º 1
0
 public static EventActivityBinder <TInstance> Send <TInstance, TMessage>(this EventActivityBinder <TInstance> source,
                                                                          EventMessageFactory <TInstance, TMessage> messageFactory, SendContextCallback <TInstance, TMessage> contextCallback)
     where TInstance : class, SagaStateMachineInstance
     where TMessage : class
 {
     return(source.Add(new SendActivity <TInstance, TMessage>(messageFactory, contextCallback)));
 }
Ejemplo n.º 2
0
 public static EventActivityBinder <TInstance> Produce <TInstance, TMessage>(this EventActivityBinder <TInstance> source,
                                                                             AsyncEventMessageFactory <TInstance, TMessage> messageFactory, Action <KafkaSendContext <TMessage> > contextCallback = null)
     where TInstance : class, SagaStateMachineInstance
     where TMessage : class
 {
     return(source.Add(new ProduceActivity <TInstance, TMessage>(messageFactory, contextCallback)));
 }
Ejemplo n.º 3
0
 public static EventActivityBinder <TInstance> Send <TInstance, TMessage>(this EventActivityBinder <TInstance> source,
                                                                          DestinationAddressProvider <TInstance> destinationAddressProvider, EventMessageFactory <TInstance, TMessage> messageFactory)
     where TInstance : class, SagaStateMachineInstance
     where TMessage : class
 {
     return(source.Add(new SendActivity <TInstance, TMessage>(destinationAddressProvider, messageFactory)));
 }
Ejemplo n.º 4
0
 public static EventActivityBinder <TInstance> Send <TInstance, TMessage>(this EventActivityBinder <TInstance> source, Uri destinationAddress,
                                                                          EventMessageFactory <TInstance, TMessage> messageFactory, Action <SendContext <TMessage> > contextCallback = null)
     where TInstance : class, SagaStateMachineInstance
     where TMessage : class
 {
     return(source.Add(new SendActivity <TInstance, TMessage>(_ => destinationAddress, messageFactory, contextCallback)));
 }
Ejemplo n.º 5
0
 public static EventActivityBinder <TInstance> Send <TInstance, TMessage>(this EventActivityBinder <TInstance> source, Uri destinationAddress,
                                                                          TMessage message)
     where TInstance : class, SagaStateMachineInstance
     where TMessage : class
 {
     return(source.Add(new SendActivity <TInstance, TMessage>(destinationAddress, x => message)));
 }
Ejemplo n.º 6
0
 /// <summary>
 /// Unschedule a message, if the message was scheduled.
 /// </summary>
 /// <typeparam name="TInstance"></typeparam>
 /// <typeparam name="TData"></typeparam>
 /// <param name="source"></param>
 /// <param name="schedule"></param>
 /// <returns></returns>
 public static EventActivityBinder <TInstance, TData> Unschedule <TInstance, TData>(
     this EventActivityBinder <TInstance, TData> source, Schedule <TInstance> schedule)
     where TInstance : class, SagaStateMachineInstance
     where TData : class
 {
     return(source.Add(new UnscheduleActivity <TInstance>(schedule)));
 }
Ejemplo n.º 7
0
 public static EventActivityBinder <TInstance> Publish <TInstance, TMessage>(this EventActivityBinder <TInstance> source,
                                                                             TMessage message)
     where TInstance : class, SagaStateMachineInstance
     where TMessage : class
 {
     return(source.Add(new PublishActivity <TInstance, TMessage>(x => message)));
 }
Ejemplo n.º 8
0
 public static EventActivityBinder <TInstance> Schedule <TInstance, TMessage>(this EventActivityBinder <TInstance> source,
                                                                              Schedule <TInstance, TMessage> schedule, EventMessageFactory <TInstance, TMessage> messageFactory, Action <SendContext> contextCallback)
     where TInstance : class, SagaStateMachineInstance
     where TMessage : class
 {
     return(source.Add(new ScheduleActivity <TInstance, TMessage>(messageFactory, schedule, contextCallback)));
 }
Ejemplo n.º 9
0
 public static EventActivityBinder <TInstance, TData> Call <TInstance, TData>(
     this EventActivityBinder <TInstance, TData> source,
     Expression <Action <TInstance, TData> > expression)
     where TInstance : class
 {
     return(source.Add(new CallActivity <TInstance, TData>(expression)));
 }
Ejemplo n.º 10
0
 public static EventActivityBinder <TInstance> Produce <TInstance, TMessage>(this EventActivityBinder <TInstance> source,
                                                                             TMessage message, Action <KafkaSendContext <TMessage> > contextCallback = null)
     where TInstance : class, SagaStateMachineInstance
     where TMessage : class
 {
     return(source.Add(new ProduceActivity <TInstance, TMessage>(x => Task.FromResult(message), contextCallback)));
 }
Ejemplo n.º 11
0
 public static EventActivityBinder <TInstance> Publish <TInstance, TMessage>(this EventActivityBinder <TInstance> source,
                                                                             TMessage message, Action <PublishContext <TMessage> > contextCallback)
     where TInstance : class, SagaStateMachineInstance
     where TMessage : class
 {
     return(source.Add(new PublishActivity <TInstance, TMessage>(x => message, contextCallback)));
 }
Ejemplo n.º 12
0
 public static EventActivityBinder <TInstance> Produce <TInstance, TMessage>(this EventActivityBinder <TInstance> source,
                                                                             EventHubNameProvider <TInstance> nameProvider, Task <TMessage> message, Action <EventHubSendContext <TMessage> > contextCallback = null)
     where TInstance : class, SagaStateMachineInstance
     where TMessage : class
 {
     return(source.Add(new ProduceActivity <TInstance, TMessage>(nameProvider, x => message, contextCallback)));
 }
Ejemplo n.º 13
0
 public static EventActivityBinder <TInstance> Schedule <TInstance, TMessage>(this EventActivityBinder <TInstance> source,
                                                                              Schedule <TInstance, TMessage> schedule, TMessage message)
     where TInstance : class, SagaStateMachineInstance
     where TMessage : class
 {
     return(source.Add(new ScheduleActivity <TInstance, TMessage>(x => message, schedule)));
 }
Ejemplo n.º 14
0
 public static EventActivityBinder <TInstance> Send <TInstance, TMessage>(this EventActivityBinder <TInstance> source,
                                                                          DestinationAddressProvider <TInstance> destinationAddressProvider, TMessage message, Action <SendContext <TMessage> > contextCallback)
     where TInstance : class, SagaStateMachineInstance
     where TMessage : class
 {
     return(source.Add(new SendActivity <TInstance, TMessage>(destinationAddressProvider, x => message, contextCallback)));
 }
Ejemplo n.º 15
0
 public static EventActivityBinder <TInstance> Schedule <TInstance, TMessage>(this EventActivityBinder <TInstance> source,
                                                                              Schedule <TInstance, TMessage> schedule, EventMessageFactory <TInstance, TMessage> messageFactory, ScheduleDelayProvider <TInstance> delayProvider)
     where TInstance : class, SagaStateMachineInstance
     where TMessage : class
 {
     return(source.Add(new ScheduleActivity <TInstance, TMessage>(messageFactory, schedule, delayProvider)));
 }
Ejemplo n.º 16
0
 public static EventActivityBinder <TInstance> Schedule <TInstance, TMessage>(this EventActivityBinder <TInstance> source,
                                                                              Schedule <TInstance, TMessage> schedule, TMessage message, Action <SendContext> contextCallback, ScheduleDelayProvider <TInstance> delayProvider)
     where TInstance : class, SagaStateMachineInstance
     where TMessage : class
 {
     return(source.Add(new ScheduleActivity <TInstance, TMessage>(x => message, schedule, contextCallback, delayProvider)));
 }
 /// <summary>
 /// Resends the message to the input queue so that it can be received again later.
 /// </summary>
 /// <typeparam name="TInstance"></typeparam>
 /// <typeparam name="TData"></typeparam>
 /// <typeparam name="TMessage"></typeparam>
 /// <param name="source"></param>
 /// <returns></returns>
 public static EventActivityBinder <TInstance, TData> RetryLater <TInstance, TData, TMessage>(
     this EventActivityBinder <TInstance, TData> source)
     where TInstance : class, SagaStateMachineInstance
     where TData : class
     where TMessage : class
 {
     return(source.Add(new RetryLaterActivity <TInstance, TData>()));
 }
Ejemplo n.º 18
0
 public static EventActivityBinder <TInstance, TData> Publish <TInstance, TData, TMessage>(
     this EventActivityBinder <TInstance, TData> source, TMessage message)
     where TInstance : class, SagaStateMachineInstance
     where TData : class
     where TMessage : class
 {
     return(source.Add(new PublishActivity <TInstance, TData, TMessage>((i, d) => message, x => { })));
 }
Ejemplo n.º 19
0
 public static EventActivityBinder <JobSaga> SendJobSlotReleased(this EventActivityBinder <JobSaga> binder, Uri destinationAddress)
 {
     return(binder.SendAsync(destinationAddress, context => context.Init <JobSlotReleased>(new
     {
         JobId = context.Instance.CorrelationId,
         context.Instance.JobTypeId
     })));
 }
Ejemplo n.º 20
0
        /// <summary>
        /// Add an activity execution to the event's behavior
        /// </summary>
        /// <typeparam name="TInstance">The state machine instance type</typeparam>
        /// <param name="binder">The event binder</param>
        /// <param name="activityFactory">The factory method which returns the activity to execute</param>
        public static EventActivityBinder <TInstance> ExecuteAsync <TInstance>(this EventActivityBinder <TInstance> binder,
                                                                               Func <BehaviorContext <TInstance>, Task <Activity <TInstance> > > activityFactory)
            where TInstance : class
        {
            var activity = new AsyncFactoryActivity <TInstance>(activityFactory);

            return(binder.Add(activity));
        }
Ejemplo n.º 21
0
        public static EventActivityBinder <TInstance, TData> Then <TInstance, TData>(
            this EventActivityBinder <TInstance, TData> source, Func <Activity <TInstance> > activityFactory)
            where TInstance : class
        {
            var activity = new FactoryEventActivity <TInstance>(activityFactory);

            return(source.Add(activity));
        }
Ejemplo n.º 22
0
        /// <summary>
        /// Adds an activity to the state machine that is resolved from the container, rather than being initialized directly.
        /// </summary>
        /// <typeparam name="TInstance"></typeparam>
        /// <param name="binder"></param>
        /// <param name="activityFactory"></param>
        /// <returns></returns>
        public static EventActivityBinder <TInstance> Activity <TInstance>(this EventActivityBinder <TInstance> binder,
                                                                           Func <IStateMachineActivitySelector <TInstance>, EventActivityBinder <TInstance> > activityFactory)
            where TInstance : class, SagaStateMachineInstance
        {
            var selector = new StateMachineActivitySelector <TInstance>(binder);

            return(activityFactory(selector));
        }
Ejemplo n.º 23
0
        /// <summary>
        /// When the Final state is entered, execute the chained activities. This occurs in any state that is not the initial or final state
        /// </summary>
        /// <param name="activityCallback">Specify the activities that are executes when the Final state is entered.</param>
        protected void Finally(Func <EventActivityBinder <TInstance>, EventActivityBinder <TInstance> > activityCallback)
        {
            EventActivityBinder <TInstance> binder = When(Final.Enter);

            binder = activityCallback(binder);

            DuringAny(binder);
        }
Ejemplo n.º 24
0
 public static EventActivityBinder <TInstance, TData> Respond <TInstance, TData, TMessage>(
     this EventActivityBinder <TInstance, TData> source, EventMessageFactory <TInstance, TData, TMessage> messageFactory)
     where TInstance : class, SagaStateMachineInstance
     where TData : class
     where TMessage : class
 {
     return(source.Add(new RespondActivity <TInstance, TData, TMessage>(messageFactory)));
 }
Ejemplo n.º 25
0
 public static EventActivityBinder <BookSagaState, IBookAddedGlobalEvent> CopyDataToInstance(
     this EventActivityBinder <BookSagaState, IBookAddedGlobalEvent> binder) => binder.Then(
     x =>
 {
     x.Instance.DateAdded = x.Data.TimeStamp.Date;
     x.Instance.Isbn      = x.Data.Isbn;
     x.Instance.Title     = x.Data.Title;
 });
Ejemplo n.º 26
0
 public static EventActivityBinder <TInstance> Schedule <TInstance, TMessage>(this EventActivityBinder <TInstance> source,
                                                                              Schedule <TInstance, TMessage> schedule, Task <TMessage> message, ScheduleTimeProvider <TInstance> timeProvider,
                                                                              Action <SendContext <TMessage> > contextCallback = null)
     where TInstance : class, SagaStateMachineInstance
     where TMessage : class
 {
     return(source.Add(new ScheduleActivity <TInstance, TMessage>(x => message, schedule, timeProvider, contextCallback)));
 }
Ejemplo n.º 27
0
 public static EventActivityBinder <TInstance, TData> Respond <TInstance, TData, TMessage>(
     this EventActivityBinder <TInstance, TData> source, TMessage message,
     Action <SendContext <TMessage> > contextCallback)
     where TInstance : class, SagaStateMachineInstance
     where TData : class
     where TMessage : class
 {
     return(source.Add(new RespondActivity <TInstance, TData, TMessage>(x => message, contextCallback)));
 }
        /// <summary>
        /// Transition the state machine to the Final state
        /// </summary>
        public static EventActivityBinder <TInstance> Finalize <TInstance>(this EventActivityBinder <TInstance> source)
            where TInstance : class
        {
            var state = source.StateMachine.GetState(source.StateMachine.Final.Name);

            var activity = new TransitionActivity <TInstance>(state, source.StateMachine.Accessor);

            return(source.Add(activity));
        }
Ejemplo n.º 29
0
 public static EventActivityBinder <TInstance, TData> Schedule <TInstance, TData, TMessage>(
     this EventActivityBinder <TInstance, TData> source, Schedule <TInstance, TMessage> schedule,
     EventMessageFactory <TInstance, TData, TMessage> messageFactory)
     where TInstance : class, SagaStateMachineInstance
     where TData : class
     where TMessage : class
 {
     return(source.Add(new ScheduleActivity <TInstance, TData, TMessage>(messageFactory, schedule)));
 }
Ejemplo n.º 30
0
 public static EventActivityBinder <TInstance, TData> Publish <TInstance, TData, TMessage>(
     this EventActivityBinder <TInstance, TData> source, EventMessageFactory <TInstance, TData, TMessage> messageFactory,
     Action <PublishContext <TMessage> > contextCallback)
     where TInstance : class, SagaStateMachineInstance
     where TData : class
     where TMessage : class
 {
     return(source.Add(new PublishActivity <TInstance, TData, TMessage>(messageFactory, contextCallback)));
 }