/// <summary>
        /// Initializes a new instance of the <see cref="SagaMediator"/> class.
        /// </summary>
        /// <param name="sagaRepository">The saga repository.</param>
        /// <param name="sagaFactory">The saga factory.</param>
        /// <param name="pipelineHooks">The pipeline hooks.</param>
        public SagaMediator(ISagaRepository sagaRepository, ISagaFactory sagaFactory, IEnumerable <IPipelineHook> pipelineHooks)
        {
            Guard.ArgumentIsNotNull(sagaRepository, nameof(sagaRepository));
            Guard.ArgumentIsNotNull(sagaFactory, nameof(sagaFactory));
            Guard.ArgumentIsNotNull(pipelineHooks, nameof(pipelineHooks));

            this.sagaRepository = sagaRepository;
            this.sagaFactory    = sagaFactory;
            this.pipelineHook   = new CompositePipelineHook(pipelineHooks);
        }
Esempio n. 2
0
        /// <summary>
        /// Initiates an instance of <see cref="SqlSagaRepository"/> with a connection string name.
        /// Actual connection string is taken from your app.config or web.config
        /// </summary>
        /// <param name="connectionFactory">An insantance implementing <see cref="IConnectionFactory"/></param>
        /// <param name="sagaFactory">An instance implementing <see cref="ISagaFactory"/></param>
        /// <param name="messageSerialiser">An instance implementing <see cref="IMessageSerialiser"/></param>
        public SqlSagaRepository(IConnectionFactory connectionFactory, ISagaFactory sagaFactory, IMessageSerialiser messageSerialiser)
        {
            Guard.ArgumentIsNotNull(connectionFactory, nameof(connectionFactory));
            Guard.ArgumentIsNotNull(sagaFactory, nameof(sagaFactory));
            Guard.ArgumentIsNotNull(messageSerialiser, nameof(messageSerialiser));

            this.messageSerialiser = messageSerialiser;
            this.sagaFactory       = sagaFactory;
            this.connectionFactory = connectionFactory;
        }
Esempio n. 3
0
        /// <summary>
        /// Initiates an instance of <see cref="SqlSagaRepository"/> with a connection string name.
        /// Actual connection string is taken from your app.config or web.config
        /// </summary>
        /// <param name="connectionFactory">An insantance implementing <see cref="IConnectionFactory"/></param>
        /// <param name="sagaFactory">An instance implementing <see cref="ISagaFactory"/></param>
        /// <param name="messageSerialiser">An instance implementing <see cref="IMessageSerialiser"/></param>
        public SqlSagaRepository(ISagaSqlDatabase database, ISagaFactory sagaFactory, IMessageSerialiser messageSerialiser)
        {
            Guard.ArgumentIsNotNull(database, nameof(database));
            Guard.ArgumentIsNotNull(sagaFactory, nameof(sagaFactory));
            Guard.ArgumentIsNotNull(messageSerialiser, nameof(messageSerialiser));

            this.messageSerialiser = messageSerialiser;
            this.sagaFactory       = sagaFactory;
            this.database          = database;
        }
Esempio n. 4
0
        /// <summary>
        /// Initializes a new instance of the <see cref="AzureTablesSagaRepository"/> class.
        /// </summary>
        /// <param name="tableClientFactory">The table client factory.</param>
        /// <param name="messageSerialiser">The message serialiser.</param>
        /// <param name="sagaFactory">The saga factory.</param>
        public AzureTablesSagaRepository(ITableClientFactory tableClientFactory, IMessageSerialiser messageSerialiser, ISagaFactory sagaFactory)
        {
            Guard.ArgumentIsNotNull(tableClientFactory, nameof(tableClientFactory));
            Guard.ArgumentIsNotNull(sagaFactory, nameof(sagaFactory));
            Guard.ArgumentIsNotNull(messageSerialiser, nameof(messageSerialiser));


            this.tableClientFactory = tableClientFactory;
            this.messageSerialiser  = messageSerialiser;
            this.sagaFactory        = sagaFactory;
        }
        public OrderFulfillmentSagaManager(IEventManager eventManager, ISagaFactory sagaFactory)
        {
            _eventManager   = eventManager;
            _sagaFactory    = sagaFactory;
            _sagas          = new Dictionary <string, IOrderFulfillmentSaga>();
            _handleSagaLock = new object();

            SagasChanged = delegate { };

            SubscribeToEvents();
        }
        public OrderFulfillmentSagaManager(IEventManager eventManager, ISagaFactory sagaFactory)
        {
            _eventManager = eventManager;
            _sagaFactory = sagaFactory;
            _sagas = new Dictionary<string, IOrderFulfillmentSaga>();
            _handleSagaLock = new object();
            
            SagasChanged = delegate { };

            SubscribeToEvents();
        }
Esempio n. 7
0
 public SagaRunner(ISagaFactory <TS, TD> sagaFactory,
                   ISagaStateService <TS, TD> sagaStateService,
                   ITransactionManager transactionManager,
                   ISagaPolicyFactory <TS> policyFactory,
                   ILogger <SagaRunner <TS, TD> > logger)
 {
     _sagaFactory        = sagaFactory ?? throw new ArgumentNullException(nameof(sagaFactory));
     _sagaStateService   = sagaStateService ?? throw new ArgumentNullException(nameof(sagaStateService));
     _logger             = logger ?? throw new ArgumentNullException(nameof(logger));
     _policyFactory      = policyFactory ?? throw new ArgumentNullException(nameof(policyFactory));
     _transactionManager = transactionManager ?? throw new ArgumentNullException(nameof(transactionManager));
 }
        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);
        }
Esempio n. 9
0
        /// <summary>
        /// Инициализирует новый экземпляр класса <see cref="SagaConfiguration{TS,TM,TK}"/>.
        /// </summary>
        /// <param name="receiverConfigurator">Конфигурация получателя входящего сообщения.</param>
        /// <param name="sagaRepository">Хранилище саги.</param>
        /// <param name="sagaIdSeparator">Вычислитель идентификатора саги.</param>
        /// <param name="sagaFactory">Фабрика саги.</param>
        /// <param name="sagaStep">Действие выполняемое при обработке саги.</param>
        /// <param name="sagaFailedHandler">Обработчик возникающих ошибок.</param>
        public SagaConfiguration(
            IReceiverConfigurator <TM> receiverConfigurator,
            ISagaRepository <TS, TK> sagaRepository,
            ISagaIdSeparator <TM, TK> sagaIdSeparator,
            ISagaFactory <TS, TK> sagaFactory,
            ISagaStep <TS, TM, TK> sagaStep,
            ISagaFailedHandler <TS, TM, TK> sagaFailedHandler)
        {
            this.receiverConfigurator = receiverConfigurator;

            this.sagaLifecycle = new DefaultSagaLifecycle <TS, TM, TK>(sagaRepository, sagaIdSeparator, sagaFactory);
            this.sagaConsumer  = new SagaConsumerOf <TS, TM, TK>(this.sagaLifecycle, sagaStep, false, sagaFailedHandler);
        }
Esempio n. 10
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;
            }
        }
Esempio n. 11
0
        /// <summary>
        /// Initiates an instance of <see cref="SqlSagaRepository"/> with a connection string name.
        /// Actual connection string is taken from your app.config or web.config
        /// </summary>
        /// <param name="connectionFactory">An insantance implementing <see cref="IConnectionFactory"/></param>
        /// <param name="sagaFactory">An instance implementing <see cref="ISagaFactory"/></param>
        /// <param name="messageSerialiser">An instance implementing <see cref="IMessageSerialiser"/></param>
        public SqlSagaRepository(IConnectionFactory connectionFactory, ISagaFactory sagaFactory, IMessageSerialiser messageSerialiser)
        {
            Guard.ArgumentIsNotNull(connectionFactory, nameof(connectionFactory));
            Guard.ArgumentIsNotNull(sagaFactory, nameof(sagaFactory));
            Guard.ArgumentIsNotNull(messageSerialiser, nameof(messageSerialiser));

            this.messageSerialiser = messageSerialiser;
            this.sagaFactory       = sagaFactory;
            this.connectionFactory = connectionFactory;

            if (connectionFactory.ConnectionIsToMySql())
            {
                this.queryWrapper = new MySqlQueryWrapper();
            }
            else
            {
                this.queryWrapper = new SqlQueryWrapper();
            }
        }
Esempio n. 12
0
 public void Register <TMessage>(ISagaFactory <TSaga, TMessage> factory)
 {
     Register(typeof(TMessage), m => factory.Create((TMessage)m));
 }
        public IEventCorrelationConfigurator <TInstance, TData> SetSagaFactory(SagaFactoryMethod <TInstance, TData> factoryMethod)
        {
            _sagaFactory = new FactoryMethodSagaFactory <TInstance, TData>(factoryMethod);

            return(this);
        }
 public SagaEventStoreRepositoryEx(IStoreEvents eventStore, ISagaFactory factory)
 {
     _eventStore = eventStore;
     _factory    = factory;
 }
Esempio n. 15
0
        /// <summary>
        /// Override the provided implementation of ISagaFactory with given instance
        /// </summary>
        /// <param name="sagaFactory">The saga factory instance</param>
        /// <returns>Current Builder for fluent configuration.</returns>
        public SagaMediatorBuilder UseSagaFactory(ISagaFactory sagaFactory)
        {
            Container.Register(typeof(ISagaFactory), sagaFactory);

            return(this);
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="InMemorySagaRepository"/> class.
 /// </summary>
 /// <param name="messageSerialiser">The message serialiser.</param>
 /// <param name="sagaFactory">The saga factory.</param>
 public InMemorySagaRepository(IMessageSerialiser messageSerialiser, ISagaFactory sagaFactory)
 {
     this.messageSerialiser = messageSerialiser;
     this.sagaFactory       = sagaFactory;
 }
Esempio n. 17
0
        /// <inheritdoc />
        public ISagaConfigurator <TS, TM, TK> UseSagaFactory(ISagaFactory <TS, TK> sagaFactory)
        {
            this.sagaLifecycle.SagaFactory = sagaFactory;

            return(this);
        }
Esempio n. 18
0
 public InstanceSagaActor(ISagaFactory <ISagaInstance, TStartMessage> sagaStarter, ISagaFactory <ISagaInstance, SagaDataAggregate <TData> > sagaFactory, IEmptySagaFactory <ISagaInstance> emptySagaFactory, IPublisher publisher) : base(sagaStarter, sagaFactory, emptySagaFactory, publisher)
 {
 }
Esempio n. 19
0
 /// <inheritdoc />
 /// <summary>
 /// Create with factory.
 /// </summary>
 /// <param name="factory"></param>
 protected WithSaga(ISagaFactory <TInput, TOutput> factory) :
     this(
         factory.ErrorHandlerStrategy, factory.Delay, factory.RetryStrategy, factory.GeneralAspect, factory.Before, factory.After)
 {
 }
Esempio n. 20
0
 /// <summary>
 /// Инициализирует новый экземпляр класса <see cref="DefaultSagaLifecycle{TS,TM,TK}"/>.
 /// </summary>
 /// <param name="repository">Хранилище временного состояния саги.</param>
 /// <param name="separator">Вычислитель идентификатора саги из сообщения.</param>
 /// <param name="factory">Фабрика создающая сагу.</param>
 public DefaultSagaLifecycle(ISagaRepository <TS, TK> repository, ISagaIdSeparator <TM, TK> separator, ISagaFactory <TS, TK> factory)
 {
     this.SagaRepository  = repository;
     this.SagaIdSeparator = separator;
     this.SagaFactory     = factory;
 }
 /// <summary>
 /// Инициализирует новый экземпляр класса <see cref="InMemorySagaRepository{TS,TK}"/>.
 /// </summary>
 /// <param name="sagaFactory">Фабрика саг используемая для создания саги возвращаемой из хранилища.</param>
 public InMemorySagaRepository(ISagaFactory <TS, TK> sagaFactory)
 {
     this.sagaFactory = sagaFactory;
 }
Esempio n. 22
0
 public EfSagaRepository(Func <TDomain> contextFactory, ISagaFactory sagaFactory)
 {
     _sagaFactory    = sagaFactory;
     _contextFactory = contextFactory;
 }
Esempio n. 23
0
 public SagasTestController(ISagaFactory sagaFactory)
 {
     this.sagaFactory = sagaFactory;
 }
Esempio n. 24
0
 public NewOrExistingSagaPolicy(ISagaFactory <TSaga, TMessage> sagaFactory, bool insertOnInitial)
 {
     _sagaFactory     = sagaFactory;
     _insertOnInitial = insertOnInitial;
 }
Esempio n. 25
0
 public FastSagaRepository(ISagaFactory sagaFactory)
 {
     this.sagaFactory = sagaFactory;
 }