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))); }
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))); }
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))); }
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))); }
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))); }
/// <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))); }
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))); }
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))); }
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))); }
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))); }
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))); }
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))); }
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))); }
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))); }
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))); }
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>())); }
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 => { }))); }
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 }))); }
/// <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)); }
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)); }
/// <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)); }
/// <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); }
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))); }
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; });
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))); }
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)); }
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))); }
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))); }