public void Configure(IReceiveEndpointConfigurator configurator, IConfigurationServiceProvider configurationServiceProvider) { ISagaStateMachineFactory stateMachineFactory = configurationServiceProvider.GetRequiredService <ISagaStateMachineFactory>(); SagaStateMachine <TInstance> stateMachine = stateMachineFactory.CreateStateMachine <TInstance>(); IStateMachineActivityFactory activityFactory = configurationServiceProvider.GetRequiredService <IStateMachineActivityFactory>(); void AddStateMachineActivityFactory(ConsumeContext context) { context.GetOrAddPayload(() => activityFactory); } var repositoryFactory = configurationServiceProvider.GetRequiredService <ISagaRepositoryFactory>(); ISagaRepository <TInstance> repository = repositoryFactory.CreateSagaRepository <TInstance>(AddStateMachineActivityFactory); var stateMachineConfigurator = new StateMachineSagaConfigurator <TInstance>(stateMachine, repository, configurator); GetSagaDefinition(configurationServiceProvider) .Configure(configurator, stateMachineConfigurator); foreach (Action <ISagaConfigurator <TInstance> > action in _configureActions) { action(stateMachineConfigurator); } configurator.AddEndpointSpecification(stateMachineConfigurator); }
public void Configure(IReceiveEndpointConfigurator configurator, IConfigurationServiceProvider configurationServiceProvider) { var stateMachine = configurationServiceProvider.GetRequiredService <SagaStateMachine <TInstance> >(); var repository = configurationServiceProvider.GetRequiredService <ISagaRepository <TInstance> >(); var decoratorRegistration = configurationServiceProvider.GetService <ISagaRepositoryDecoratorRegistration <TInstance> >(); if (decoratorRegistration != null) { repository = decoratorRegistration.DecorateSagaRepository(repository); } var stateMachineConfigurator = new StateMachineSagaConfigurator <TInstance>(stateMachine, repository, configurator); GetSagaDefinition(configurationServiceProvider) .Configure(configurator, stateMachineConfigurator); foreach (Action <ISagaConfigurator <TInstance> > action in _configureActions) { action(stateMachineConfigurator); } LogContext.Debug?.Log("Configured endpoint {Endpoint}, Saga: {SagaType}, State Machine: {StateMachineType}", configurator.InputAddress.GetLastPart(), TypeMetadataCache <TInstance> .ShortName, TypeMetadataCache.GetShortName(stateMachine.GetType())); configurator.AddEndpointSpecification(stateMachineConfigurator); }
/// <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="repository">The saga repository for the instances</param> /// <param name="configure">Optionally configure the saga</param> /// <returns></returns> public static void StateMachineSaga<TInstance>(this IReceiveEndpointConfigurator configurator, SagaStateMachine<TInstance> stateMachine, ISagaRepository<TInstance> repository, Action<ISagaConfigurator<TInstance>> configure = null) where TInstance : class, SagaStateMachineInstance { var stateMachineConfigurator = new StateMachineSagaConfigurator<TInstance>(stateMachine, repository, configurator); configure?.Invoke(stateMachineConfigurator); configurator.AddEndpointSpecification(stateMachineConfigurator); }
/// <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="scope">The Lamar Lifetime container to resolve the repository</param> /// <param name="configure">Optionally configure the saga</param> /// <param name="configureScope">Configuration for scope container</param> /// <returns></returns> public static void StateMachineSaga <TInstance>(this IReceiveEndpointConfigurator configurator, SagaStateMachine <TInstance> stateMachine, IContainer scope, Action <ISagaConfigurator <TInstance> > configure = null, Action <ConsumeContext> configureScope = null) where TInstance : class, SagaStateMachineInstance { ISagaRepository <TInstance> repository = CreateSagaRepository <TInstance>(scope, configureScope); var stateMachineConfigurator = new StateMachineSagaConfigurator <TInstance>(stateMachine, repository, configurator); configure?.Invoke(stateMachineConfigurator); configurator.AddEndpointSpecification(stateMachineConfigurator); }
/// <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="scope">The Autofac Lifetime container to resolve the repository</param> /// <param name="configure">Optionally configure the saga</param> /// <param name="name">The name to use for the scope created for each message</param> /// <param name="configureScope">Configuration for scope container</param> /// <returns></returns> public static void StateMachineSaga <TInstance>(this IReceiveEndpointConfigurator configurator, SagaStateMachine <TInstance> stateMachine, ILifetimeScope scope, Action <ISagaConfigurator <TInstance> > configure = null, string name = "message", Action <ContainerBuilder, ConsumeContext> configureScope = null) where TInstance : class, SagaStateMachineInstance { var repository = scope.Resolve <ISagaRepository <TInstance> >(); var stateMachineConfigurator = new StateMachineSagaConfigurator <TInstance>(stateMachine, repository, configurator); configure?.Invoke(stateMachineConfigurator); configurator.AddEndpointSpecification(stateMachineConfigurator); }
/// <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="scope">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, IServiceProvider scope, Action <ISagaConfigurator <TInstance> > configure = null) where TInstance : class, SagaStateMachineInstance { ISagaRepositoryFactory repositoryFactory = new DependencyInjectionStateMachineSagaRepositoryFactory(scope); var sagaRepository = repositoryFactory.CreateSagaRepository <TInstance>(); var stateMachineConfigurator = new StateMachineSagaConfigurator <TInstance>(stateMachine, sagaRepository, configurator); configure?.Invoke(stateMachineConfigurator); configurator.AddEndpointSpecification(stateMachineConfigurator); }
/// <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="scope">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, ILifetimeScope scope, Action <ISagaConfigurator <TInstance> > configure = null) where TInstance : class, SagaStateMachineInstance { ISagaRepositoryFactory repositoryFactory = new AutofacStateMachineSagaRepositoryFactory(new SingleLifetimeScopeProvider(scope), "message"); var sagaRepository = repositoryFactory.CreateSagaRepository <TInstance>(); var stateMachineConfigurator = new StateMachineSagaConfigurator <TInstance>(stateMachine, sagaRepository, configurator); configure?.Invoke(stateMachineConfigurator); configurator.AddEndpointSpecification(stateMachineConfigurator); }
/// <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, ILifetimeScope container, Action <ISagaConfigurator <TInstance> > configure = null) where TInstance : class, SagaStateMachineInstance { var sagaRepository = container.Resolve <ISagaRepository <TInstance> >(); var containerRepository = new AutofacStateMachineSagaRepository <TInstance>(sagaRepository, container); var stateMachineConfigurator = new StateMachineSagaConfigurator <TInstance>(stateMachine, containerRepository, configurator); configure?.Invoke(stateMachineConfigurator); configurator.AddEndpointSpecification(stateMachineConfigurator); }
/// <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 { ISagaRepositoryFactory repositoryFactory = new StructureMapStateMachineSagaRepositoryFactory(container); var sagaRepository = repositoryFactory.CreateSagaRepository <TInstance>(); var stateMachineConfigurator = new StateMachineSagaConfigurator <TInstance>(stateMachine, sagaRepository, configurator); configure?.Invoke(stateMachineConfigurator); configurator.AddEndpointSpecification(stateMachineConfigurator); }
/// <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="context">The Autofac root container to resolve the repository</param> /// <param name="configure">Optionally configure the saga</param> /// <param name="name">The name to use for the scope created for each message</param> /// <param name="configureScope">Configuration for scope container</param> /// <returns></returns> public static void StateMachineSaga <TInstance>(this IReceiveEndpointConfigurator configurator, SagaStateMachine <TInstance> stateMachine, IComponentContext context, Action <ISagaConfigurator <TInstance> > configure = null, string name = "message", Action <ContainerBuilder, ConsumeContext> configureScope = null) where TInstance : class, SagaStateMachineInstance { var scope = context.Resolve <ILifetimeScope>(); ISagaRepositoryFactory repositoryFactory = new AutofacStateMachineSagaRepositoryFactory(new SingleLifetimeScopeProvider(scope), name, configureScope); ISagaRepository <TInstance> sagaRepository = repositoryFactory.CreateSagaRepository <TInstance>(); var stateMachineConfigurator = new StateMachineSagaConfigurator <TInstance>(stateMachine, sagaRepository, configurator); configure?.Invoke(stateMachineConfigurator); configurator.AddEndpointSpecification(stateMachineConfigurator); }
public void Configure(IReceiveEndpointConfigurator configurator, IConfigurationServiceProvider configurationServiceProvider) { ISagaStateMachineFactory stateMachineFactory = configurationServiceProvider.GetRequiredService<ISagaStateMachineFactory>(); SagaStateMachine<TInstance> stateMachine = stateMachineFactory.CreateStateMachine<TInstance>(); var repositoryFactory = configurationServiceProvider.GetRequiredService<ISagaRepositoryFactory>(); ISagaRepository<TInstance> repository = repositoryFactory.CreateSagaRepository<TInstance>(); var stateMachineConfigurator = new StateMachineSagaConfigurator<TInstance>(stateMachine, repository, configurator); LogContext.Debug?.Log("Configuring endpoint {Endpoint}, Saga: {SagaType}, State Machine: {StateMachineType}", configurator.InputAddress.GetLastPart(), TypeMetadataCache<TInstance>.ShortName, TypeMetadataCache.GetShortName(stateMachine.GetType())); GetSagaDefinition(configurationServiceProvider) .Configure(configurator, stateMachineConfigurator); foreach (Action<ISagaConfigurator<TInstance>> action in _configureActions) action(stateMachineConfigurator); configurator.AddEndpointSpecification(stateMachineConfigurator); }
public void Configure(IReceiveEndpointConfigurator configurator, IConfigurationServiceProvider configurationServiceProvider) { var stateMachine = configurationServiceProvider.GetRequiredService <TFuture>(); var repository = configurationServiceProvider.GetRequiredService <ISagaRepository <FutureState> >(); var decoratorRegistration = configurationServiceProvider.GetService <ISagaRepositoryDecoratorRegistration <FutureState> >(); if (decoratorRegistration != null) { repository = decoratorRegistration.DecorateSagaRepository(repository); } var sagaConfigurator = new StateMachineSagaConfigurator <FutureState>(stateMachine, repository, configurator); GetFutureDefinition(configurationServiceProvider) .Configure(configurator, sagaConfigurator); LogContext.Info?.Log("Configured endpoint {Endpoint}, Future: {FutureType}", configurator.InputAddress.GetLastPart(), TypeCache <TFuture> .ShortName); configurator.AddEndpointSpecification(sagaConfigurator); }