public static IServiceCollection AddEventTypeResolver( this IServiceCollection services, Action <EventTypeRegistry> configure) { services.AddSingleton <IEventTypeResolver>(serviceProvider => { var eventTypeRegistry = new EventTypeRegistry(); configure(eventTypeRegistry); return(new MappedEventTypeProvider(eventTypeRegistry)); }); return(services); }
protected virtual IEventRepository CreateBoxEventRepository(Func <EventId, object, string> calculateShard) { var serializer = new Serializer(new AllPropertiesExtractor()); var cassandraCluster = new CassandraCluster(cassandraClusterSettings, Logger.Instance); var eventTypeRegistry = new EventTypeRegistry(); var factory = new EventRepositoryFactory(serializer, cassandraCluster, eventTypeRegistry, Logger.Instance); var eventRepositoryColumnFamilyFullNames = new EventRepositoryColumnFamilyFullNames( ColumnFamilies.eventLog, ColumnFamilies.eventLogAdditionalInfo, ColumnFamilies.remoteLock); var shardCalculator = new ShardCalculator(calculateShard); var eventRepository = factory.CreateEventRepository(shardCalculator, eventRepositoryColumnFamilyFullNames, new EventLogNullProfiler(), TimeSpan.FromDays(1)); return(eventRepository); }
private IEventRepository CreateBoxEventRepository(Func <EventId, object, string> calculateShard, double timeoutInSeconds) { var serializer = new Serializer(new AllPropertiesExtractor()); var cassandraSettings = SingleCassandraNodeSetUpFixture.Node.CreateSettings(); var cassandraCluster = new CatalogueCassandraClusterWithLongWrites(new CassandraCluster(cassandraSettings, Logger.Instance), TimeSpan.FromSeconds(timeoutInSeconds)); var eventTypeRegistry = new EventTypeRegistry(); var factory = new EventRepositoryFactory(serializer, cassandraCluster, eventTypeRegistry, Logger.Instance); var eventRepositoryColumnFamilyFullNames = new EventRepositoryColumnFamilyFullNames( ColumnFamilies.eventLog, ColumnFamilies.eventLogAdditionalInfo, ColumnFamilies.remoteLock); var shardCalculator = new ShardCalculator(calculateShard); var result = factory.CreateEventRepository(shardCalculator, eventRepositoryColumnFamilyFullNames, new EventLogNullProfiler(), TimeSpan.FromDays(1)); return(result); }
private static void InitializeSchemas( StoreSettings settings, EventTypeRegistry typesRegistry) { var schemas = settings.Contexts .SelectMany(c => c.Value.GetSchemas(c.Key)) .ToArray(); using var connection = new NpgsqlConnection(settings.Connections.Default); connection.Open(); var installer = new SchemaInstaller(connection); foreach (var schema in schemas) { installer.Install(schema); } typesRegistry.Load(connection, schemas); }
public static EventTypeRegistry Map <TEvent>(this EventTypeRegistry _this, string eventName) { return(_this.Map(eventName, typeof(TEvent))); }
public MappedEventTypeProvider(EventTypeRegistry eventTypeRegistry) { this.eventTypeRegistry = eventTypeRegistry; }
public static IServiceCollection AddEventStore( this IServiceCollection services, EventStoreSettings settings, ILoggerFactory loggerFactory) { if (services == null) { throw new ArgumentNullException(nameof(services)); } if (settings == null) { throw new ArgumentNullException(nameof(settings)); } if (loggerFactory == null) { throw new ArgumentNullException(nameof(loggerFactory)); } if (settings.Store == null) { throw new ArgumentException("Store settings not specified.", nameof(settings.Store)); } if (settings.AggregateFactories == null) { throw new ArgumentException("Factories not specified.", nameof(settings.AggregateFactories)); } var compositeContext = new CompositeEventStoreContext(settings.Store.Contexts); var typesRegistry = new EventTypeRegistry(settings.Store.Connections, compositeContext); InitializeSchemas(settings.Store, typesRegistry); var reader = new EventsReader(settings.Store.Connections, compositeContext, typesRegistry); var eventStore = new Postgres.EventStore( reader, new EventsWriter(settings.Store.Connections, compositeContext, typesRegistry, new EventsOutbox(compositeContext, reader), loggerFactory.CreateLogger <EventsWriter>()) ); var backgroundPublisher = new OutboxPublisherService( new OutboxPublisher( settings.Store.Connections, settings.Store.Contexts, reader), settings.Store.OutboxInterval, loggerFactory.CreateLogger <OutboxPublisherService>()); services .AddAggregates(settings.AggregateFactories) .AddStreamResolver(settings.Store.Serializer) .AddSingleton <IEventStore>(eventStore) .AddSingleton <IHostedService>(backgroundPublisher); if (settings.Snapshots == null) { return(services); } return(services.AddSnapshotStore( settings.Snapshots, settings.Store.Connections, compositeContext, loggerFactory)); }