ISagaRepository <T> ISagaRepositoryFactory.CreateSagaRepository <T>() { var repository = _scopeProvider.GetRequiredService <ISagaRepository <T> >(); var scopeProvider = new DependencyInjectionSagaScopeProvider <T>(_scopeProvider); scopeProvider.AddScopeAction(x => x.GetOrAddPayload <IStateMachineActivityFactory>(() => new DependencyInjectionStateMachineActivityFactory())); return(new ScopeSagaRepository <T>(repository, scopeProvider)); }
/// <summary> /// Registers a saga using the container that has the repository resolved from the container /// </summary> /// <typeparam name="T"></typeparam> /// <param name="configurator"></param> /// <param name="provider"></param> /// <param name="configure"></param> /// <returns></returns> public static void Saga <T>(this IReceiveEndpointConfigurator configurator, IServiceProvider provider, Action <ISagaConfigurator <T> > configure = null) where T : class, ISaga { var repository = provider.GetRequiredService <ISagaRepository <T> >(); ISagaScopeProvider <T> scopeProvider = new DependencyInjectionSagaScopeProvider <T>(provider); var sagaRepository = new ScopeSagaRepository <T>(repository, scopeProvider); configurator.Saga(sagaRepository, configure); }
ISagaRepository <T> ISagaRepositoryFactory.CreateSagaRepository <T>(Action <ConsumeContext> scopeAction) { var repository = _serviceProvider.GetRequiredService <ISagaRepository <T> >(); var scopeProvider = new DependencyInjectionSagaScopeProvider <T>(_serviceProvider); if (scopeAction != null) { scopeProvider.AddScopeAction(scopeAction); } return(new ScopeSagaRepository <T>(repository, scopeProvider)); }