/// <summary> /// Configure DynamoDb saga repository /// </summary> /// <param name="services"></param> /// <param name="configure"></param> public static void AddDynamoDbEventStore <TSaga>(this IServiceCollection services, Action <DynamoDbEventStoreOptions> configure = null) where TSaga : class, IEventSourcedSaga { var options = new DynamoDbEventStoreOptions(); configure?.Invoke(options); var name = typeof(TSaga).Name; if (options.StoreName is null) { options.StoreName = $"MassTransist.DynamoDbIntegration.{name}"; } services.AddSingleton(options); var provider = services.BuildServiceProvider(); var knownEventTypes = provider.GetService <KnownEventTypes>(); if (knownEventTypes is null) { throw new InvalidOperationException("Known events types should be registered before register saga repository. Consider use RegisterKnownEventsTypes(params Type[] knownEvetTypes)"); } services.AddAWSService <IAmazonDynamoDB>(options); services.AddSingleton <IDynamoDbEventStoreDatabaseContext, DynamoDbEventStoreDatabaseContext>(); services.AddAsyncInitializer <DynamoDbEventStoreDatabaseContextInitializer>(); var client = services.BuildServiceProvider().GetService <IAmazonDynamoDB>(); var repository = new DynamoDbSagaRepository <TSaga>(new DynamoDBContext(client), options, knownEventTypes); services.AddSingleton <DynamoDbSagaRepository <TSaga> >(repository); }
public V2DynamoDbSagaRepository(IDynamoDBContext connection, DynamoDbEventStoreOptions options, KnownEventTypes knownTypes) { _connection = connection ?? throw new ArgumentNullException(nameof(connection)); _options = options ?? throw new ArgumentNullException(nameof(options)); _knownTypes = knownTypes ?? throw new ArgumentNullException(nameof(knownTypes)); if (TypeMapping.GetTypeName(typeof(V2EventSourcedSagaInstance.SagaInstanceTransitioned)).Contains("+")) { TypeMapping.Add <V2EventSourcedSagaInstance.SagaInstanceTransitioned>("SagaInstanceTransitioned"); } }
public DynamoDbEventStoreFixture() { var amazonDynamoDbConfig = new AmazonDynamoDBConfig { ServiceURL = "http://localhost:8000" }; var client = new AmazonDynamoDBClient("root", "secret", amazonDynamoDbConfig); Options = new DynamoDbEventStoreOptions { StoreName = Guid.NewGuid().ToString() }; var context = new DynamoDbEventStoreDatabaseContext(client, Options); context.ConfigureAsync().ConfigureAwait(false).GetAwaiter().GetResult(); Connection = new DynamoDBContext(client); OperationConfig = new DynamoDBOperationConfig { OverrideTableName = Options.StoreName, Conversion = DynamoDBEntryConversion.V2 }; }
public DynamoDbSagaRepository(IDynamoDBContext connection, DynamoDbEventStoreOptions options, KnownEventTypes knownTypes) { _connection = connection ?? throw new ArgumentNullException(nameof(connection)); _knownTypes = knownTypes ?? throw new ArgumentNullException(nameof(knownTypes)); if (options == null) { throw new ArgumentNullException(nameof(options)); } _configuration = new DynamoDBOperationConfig { OverrideTableName = options.StoreName, Conversion = DynamoDBEntryConversion.V2 }; if (TypeMapping.GetTypeName(typeof(EventSourcedSagaInstance.SagaInstanceTransitioned)).Contains("+")) { TypeMapping.Add <EventSourcedSagaInstance.SagaInstanceTransitioned>("SagaInstanceTransitioned"); } }
public MissingPipe(IDynamoDBContext connection, DynamoDbEventStoreOptions options, IPipe <SagaConsumeContext <TSaga, TMessage> > next) { _connection = connection ?? throw new ArgumentNullException(nameof(connection)); _options = options ?? throw new ArgumentNullException(nameof(options)); _next = next ?? throw new ArgumentNullException(nameof(next)); }
public V2DynamoDbEventStoreSagaConsumeContext(IDynamoDBContext connection, ConsumeContext <TMessage> context, TSaga instance, DynamoDbEventStoreOptions options) : base(context) { Saga = instance; _connection = connection; _options = options; }