public SagaStateMachineDistributorConnectorFactory(IWorkerSelectorFactory workerSelectorFactory,
                                                    ISagaRepository <TSaga> sagaRepository)
 {
     _workerSelectorFactory = workerSelectorFactory;
     _sagaRepository        = sagaRepository;
     _policyFactory         = new SagaPolicyFactory();
 }
        public HandlerDistributorConnector(ReferenceFactory referenceFactory,
                                           IWorkerSelectorFactory workerSelectorFactory)
        {
            _referenceFactory = referenceFactory;

            _messageConnector = new MessageDistributorConnector <TMessage>(workerSelectorFactory);
        }
Ejemplo n.º 3
0
        public ConsumerDistributorConnector(ReferenceFactory referenceFactory,
                                            IWorkerSelectorFactory workerSelectorFactory)
        {
            _workerSelectorFactory = workerSelectorFactory;
            _referenceFactory      = referenceFactory;

            Type[] interfaces = typeof(T).GetInterfaces();

            if (interfaces.Contains(typeof(ISaga)))
            {
                throw new ConfigurationException("A saga cannot be registered as a consumer");
            }

            if (interfaces.Implements(typeof(InitiatedBy <>)) ||
                interfaces.Implements(typeof(Orchestrates <>)) ||
                interfaces.Implements(typeof(Observes <,>)))
            {
                throw new ConfigurationException("InitiatedBy, Orchestrates, and Observes can only be used with sagas");
            }

            _connectors = ConsumesSelectedContext()
                          .Concat(ConsumesContext())
                          .Concat(ConsumesSelected())
                          .Concat(ConsumesAll())
                          .Distinct((x, y) => x.MessageType == y.MessageType)
                          .ToList();
        }
        public ObservesSagaDistributorConnector(IWorkerSelectorFactory workerSelectorFactory,
            ISagaRepository<TSaga> sagaRepository)
        {
            _workerSelectorFactory = workerSelectorFactory;
            _sagaRepository = sagaRepository;

            // TODO get expression to compare and get Guids for saga instances
        }
Ejemplo n.º 5
0
        public Saga(IWorkerSelectorFactory workerSelectorFactory,
                    ISagaRepository <TSaga> sagaRepository, DataEvent <TSaga, TMessage> dataEvent,
                    IEnumerable <State> states,
                    ISagaPolicyFactory policyFactory,
                    Expression <Func <TSaga, bool> > removeExpression)
        {
            _workerSelectorFactory = workerSelectorFactory;
            _sagaRepository        = sagaRepository;
            _dataEvent             = dataEvent;

            _policy = policyFactory.GetPolicy <TSaga, TMessage>(states, x => x.CorrelationId, removeExpression);
        }
Ejemplo n.º 6
0
        public T UseWorkerSelector(
            Func <IWorkerSelectorFactory> workerSelectorFactory)
        {
            _workerSelectorFactory = () =>
            {
                IWorkerSelectorFactory factory = workerSelectorFactory();

                _workerSelectorFactory = () => factory;

                return(factory);
            };

            return(this as T);
        }
Ejemplo n.º 7
0
        public CorrelatedEventSagaDistributorConnector(IWorkerSelectorFactory workerSelectorFactory,
                                                       ISagaRepository <TSaga> sagaRepository,
                                                       DataEvent <TSaga, TMessage> dataEvent,
                                                       IEnumerable <State> states,
                                                       ISagaPolicyFactory policyFactory,
                                                       Expression <Func <TSaga, bool> > removeExpression)
        {
            _workerSelectorFactory = workerSelectorFactory;
            _sagaRepository        = sagaRepository;
            _dataEvent             = dataEvent;

            Func <TMessage, Guid> getNewSagaId = message => message.CorrelationId;

            _policy = policyFactory.GetPolicy(states, getNewSagaId, removeExpression);
        }
        public PropertyEventSagaDistributorConnector(IWorkerSelectorFactory workerSelectorFactory,
                                                     ISagaRepository <TSaga> sagaRepository,
                                                     DataEvent <TSaga, TMessage> dataEvent,
                                                     IEnumerable <State> states,
                                                     ISagaPolicyFactory policyFactory,
                                                     Expression <Func <TSaga, bool> > removeExpression,
                                                     EventBinder <TSaga> eventBinder)
        {
            _workerSelectorFactory = workerSelectorFactory;
            _sagaRepository        = sagaRepository;
            _dataEvent             = dataEvent;

            _bindExpression = eventBinder.GetBindExpression <TMessage>();

            Func <TMessage, Guid> correlationIdSelector = GetCorrelationIdSelector(eventBinder);

            _policy = policyFactory.GetPolicy(states, correlationIdSelector, removeExpression);
        }
Ejemplo n.º 9
0
 public CorrelatedSagaDistributorConnector(IWorkerSelectorFactory workerSelectorFactory,
                                           ISagaRepository <TSaga> sagaRepository)
 {
     _workerSelectorFactory = workerSelectorFactory;
     _sagaRepository        = sagaRepository;
 }