Esempio n. 1
0
        /// <summary>
        /// Send requests to the configured service endpoint, and setup the state machine to accept the responses.
        /// </summary>
        /// <typeparam name="TInstance">The state instance type</typeparam>
        /// <typeparam name="TData">The event data type</typeparam>
        /// <typeparam name="TRequest">The request message type</typeparam>
        /// <typeparam name="TResponse">The response message type</typeparam>
        /// <param name="binder">The event binder</param>
        /// <param name="request">The configured request to use</param>
        /// <param name="messageFactory">The request message factory</param>
        /// <returns></returns>
        public static EventActivityBinder <TInstance, TData> MultiRequest <TInstance, TData, TState, TRequest, TResponse>(
            this EventActivityBinder <TInstance, TData> binder,
            MultiRequest <TInstance, TState, TRequest, TResponse> request,
            AsyncEventMultiMessageFactory <TInstance, TData, TRequest> messageFactory)
            where TInstance : class, SagaStateMachineInstance
            where TData : class
            where TRequest : class
            where TResponse : class
        {
            ScheduleTokenId.UseTokenId <RequestTimeoutExpired <TRequest> >(x => x.RequestId);
            var activity = new MultiRequestActivity <TInstance, TData, TState, TRequest, TResponse>(request, messageFactory);

            return(binder.Add(activity));
        }
 /// <summary>
 /// Initializes a new instance.
 /// </summary>
 /// <param name="request"></param>
 /// <param name="serviceAddressProvider"></param>
 /// <param name="asyncMessageFactory"></param>
 public MultiRequestActivity(MultiRequest <TInstance, TState, TRequest, TResponse> request, ServiceAddressProvider <TInstance> serviceAddressProvider, AsyncEventMultiMessageFactory <TInstance, TRequest> asyncMessageFactory) :
     base(request)
 {
     this.asyncMessageFactory = asyncMessageFactory;
     serviceAddressProvider   = context => serviceAddressProvider(context) ?? request.Settings.ServiceAddress;
 }