コード例 #1
0
        public static ConnectHandle ConnectStateMachineSaga <TInstance>(this IConsumePipeConnector bus, SagaStateMachine <TInstance> stateMachine,
                                                                        IContainer container)
            where TInstance : class, SagaStateMachineInstance
        {
            var connector = new StateMachineConnector <TInstance>(stateMachine);

            var sagaRepository = container.GetInstance <ISagaRepository <TInstance> >();

            var containerRepository = new StructureMapStateMachineSagaRepository <TInstance>(sagaRepository, container);

            return(connector.ConnectSaga(bus, containerRepository));
        }
コード例 #2
0
        /// <summary>
        /// Subscribe a state machine saga to the endpoint
        /// </summary>
        /// <typeparam name="TInstance">The state machine instance type</typeparam>
        /// <param name="configurator"></param>
        /// <param name="stateMachine">The state machine</param>
        /// <param name="container">The StructureMap Container to resolve the repository</param>
        /// <param name="configure">Optionally configure the saga</param>
        /// <returns></returns>
        public static void StateMachineSaga <TInstance>(this IReceiveEndpointConfigurator configurator, SagaStateMachine <TInstance> stateMachine,
                                                        IContainer container, Action <ISagaConfigurator <TInstance> > configure = null)
            where TInstance : class, SagaStateMachineInstance
        {
            var sagaRepository = container.GetInstance <ISagaRepository <TInstance> >();

            var containerRepository = new StructureMapStateMachineSagaRepository <TInstance>(sagaRepository, container);

            var stateMachineConfigurator = new StateMachineSagaSpecification <TInstance>(stateMachine, containerRepository);

            configure?.Invoke(stateMachineConfigurator);

            configurator.AddEndpointSpecification(stateMachineConfigurator);
        }