public IEventCorrelationConfigurator <TInstance, TData> CorrelateById(Func <ConsumeContext <TData>, Guid> selector)
        {
            _messageFilter = new CorrelationIdMessageFilter <TData>(selector);

            _sagaFilterFactory = (repository, policy, sagaPipe) => new CorrelatedSagaFilter <TInstance, TData>(repository, policy, sagaPipe);

            return(this);
        }
示例#2
0
 public StateMachineSagaMessageConnector(IFilter <SagaConsumeContext <TInstance, TMessage> > consumeFilter, ISagaPolicy <TInstance, TMessage> policy,
                                         SagaFilterFactory <TInstance, TMessage> sagaFilterFactory, IFilter <ConsumeContext <TMessage> > messageFilter)
     : base(consumeFilter)
 {
     _policy            = policy;
     _sagaFilterFactory = sagaFilterFactory;
     _messageFilter     = messageFilter;
 }
示例#3
0
        public StateMachineEventConnectorFactory(SagaStateMachine <TInstance> stateMachine, EventCorrelation <TInstance, TMessage> correlation)
        {
            _consumeFilter = new StateMachineSagaMessageFilter <TInstance, TMessage>(stateMachine, correlation.Event);

            _sagaFilterFactory = correlation.FilterFactory;
            _policy            = correlation.Policy;
            _messageFilter     = correlation.MessageFilter;
        }
        public MassTransitEventCorrelation(SagaStateMachine <TInstance> machine, Event <TData> @event, SagaFilterFactory <TInstance, TData> sagaFilterFactory, IFilter <ConsumeContext <TData> > messageFilter, IPipe <ConsumeContext <TData> > missingPipe, ISagaFactory <TInstance, TData> sagaFactory, bool insertOnInitial)
        {
            _event           = @event;
            FilterFactory    = sagaFilterFactory;
            _messageFilter   = messageFilter;
            _missingPipe     = missingPipe;
            _sagaFactory     = sagaFactory;
            _insertOnInitial = insertOnInitial;
            _machine         = machine;

            _policy = new Lazy <ISagaPolicy <TInstance, TData> >(GetSagaPolicy);
        }
示例#5
0
        public MassTransitEventCorrelationConfigurator(SagaStateMachine <TInstance> machine, Event <TData> @event, EventCorrelation existingCorrelation)
        {
            _event           = @event;
            _machine         = machine;
            _insertOnInitial = false;

            _sagaFactory = new DefaultSagaFactory <TInstance, TData>();

            var correlation = existingCorrelation as EventCorrelation <TInstance, TData>;

            if (correlation != null)
            {
                _sagaFilterFactory = correlation.FilterFactory;
                _messageFilter     = correlation.MessageFilter;
            }
        }
        public IEventCorrelationConfigurator <TInstance, TData> CorrelateBy(Expression <Func <TInstance, ConsumeContext <TData>, bool> > correlationExpression)
        {
            if (correlationExpression == null)
            {
                throw new ArgumentNullException(nameof(correlationExpression));
            }

            _sagaFilterFactory = (repository, policy, sagaPipe) =>
            {
                var queryFactory = new ExpressionCorrelationSagaQueryFactory <TInstance, TData>(correlationExpression);

                return(new QuerySagaFilter <TInstance, TData>(repository, policy, queryFactory, sagaPipe));
            };

            return(this);
        }
        public IEventCorrelationConfigurator <TInstance, TData> CorrelateById <T>(Expression <Func <TInstance, T> > propertyExpression,
                                                                                  Func <ConsumeContext <TData>, T> selector) where T : struct
        {
            if (propertyExpression == null)
            {
                throw new ArgumentNullException(nameof(propertyExpression));
            }
            if (selector == null)
            {
                throw new ArgumentNullException(nameof(selector));
            }

            _sagaFilterFactory = (repository, policy, sagaPipe) =>
            {
                var queryFactory = new PropertyExpressionSagaQueryFactory <TInstance, TData, T>(propertyExpression, selector);

                return(new QuerySagaFilter <TInstance, TData>(repository, policy, queryFactory, sagaPipe));
            };

            return(this);
        }