public static EventStoreStatefulActorBuilder <TActor, TAggregate, TRegistry> Create(
            ClusterVNode clusterVNode,
            ConnectionSettings connectionSettings,
            IActorConfiguration actorConfiguration,
            ILoggerFactory?loggerFactory = null,
            Action <IEventStoreRepositoryConfiguration>?eventStoreRepositoryConfigurationBuilder = null)
        {
            var connection        = EmbeddedEventStoreConnection.Create(clusterVNode, connectionSettings);
            var connectionMonitor = new EventStoreConnectionStatusMonitor(connection, loggerFactory);

            loggerFactory ??= new DummyLoggerFactory();

            var eventStoreRepositoryConfiguration = new EventStoreRepositoryConfiguration();

            eventStoreRepositoryConfigurationBuilder?.Invoke(eventStoreRepositoryConfiguration);

            var eventStoreRepository = new EventStoreAggregateRepository(
                eventStoreRepositoryConfiguration,
                connection,
                connectionMonitor,
                loggerFactory);

            var builder = new EventStoreStatefulActorBuilder <TActor, TAggregate, TRegistry>(actorConfiguration, eventStoreRepository, connectionMonitor, loggerFactory);

            return(builder);
        }
Exemple #2
0
        static async Task Main(string[] args)
        {
            int             DEFAULT_PORT = 1113;
            UserCredentials credentials  = new UserCredentials("admin", "changeit");

            var settings = ConnectionSettings.Create()
                           .SetDefaultUserCredentials(credentials)
                           .UseConsoleLogger()
                           .Build();

            var eventStoreConnection = EventStoreConnection.Create(settings, new IPEndPoint(IPAddress.Loopback, DEFAULT_PORT));
            await eventStoreConnection.ConnectAsync();

            var eventStoreAggregateRepository = new EventStoreAggregateRepository <TodoAggregateRoot>(eventStoreConnection);
            IAggregateFactory factory         = new AggregateFactory();

            var aggregateId = Guid.NewGuid();
            var agg         = factory.Create <TodoAggregateRoot>();

            agg.Create(aggregateId, "My List");
            agg.AddTask(Guid.NewGuid(), "get 1 egg");
            agg.AddTask(Guid.NewGuid(), "get milk");
            agg.AddTask(Guid.NewGuid(), "dry clothes");
            agg.AddTask(Guid.NewGuid(), "solve world hunger");

            await eventStoreAggregateRepository.SaveAsync(agg);

            var aggregate = await eventStoreAggregateRepository.GetAsync(agg.AggregateId);

            Console.WriteLine(JsonConvert.SerializeObject(aggregate, Formatting.Indented));
        }
        protected override void InitRepository()
        {
            _eventStore = new EmbeddedEventStore(11113, 12113);
            _eventStore.Start();

            _connection = EmbeddedEventStoreConnection.Create(_eventStore.Node);
            _connection.ConnectAsync().Wait();

            RepoUnderTest = new EventStoreAggregateRepository(_connection);
        }
Exemple #4
0
        public async Task ShouldRegisterOneBusAndHandleEventsFromDifferentSources()
        {
            var testBusRegistrationActor = EventStoreEmbeddedStatelessActorBuilder <TestBusRegistrationStatelessActor, DummyBusRegistry>
                                           .Create(_clusterVNode, _connectionSettings, ActorConfiguration.Default, _loggerFactory)
                                           .WithBus <IEventStoreBus>((actor, bus) => actor.SubscribeFromEndToAllStreams())
                                           .WithBus <IDummyBus>((actor, bus) =>
            {
                actor.SubscribeDummyBus("somesubject");
            })
                                           .Build();

            await Task.Delay(500);

            var eventStoreRepositoryConfiguration = new EventStoreRepositoryConfiguration();
            var connection        = EmbeddedEventStoreConnection.Create(_clusterVNode, _connectionSettings);
            var connectionMonitor = new EventStoreConnectionStatusMonitor(connection, _loggerFactory);

            var eventStoreRepository = new EventStoreAggregateRepository(
                eventStoreRepositoryConfiguration,
                connection,
                connectionMonitor,
                _loggerFactory);


            var dummyBus = testBusRegistrationActor.GetConnectedBus <IDummyBus>();

            dummyBus.Push(new SomeData("entity", Guid.NewGuid()));

            await eventStoreRepository.Emit(new SomeData("thisisit", Guid.NewGuid()));

            await Task.Delay(500);

            Assert.AreEqual(2, testBusRegistrationActor.Events.Count);
            Assert.True(testBusRegistrationActor.Events.Any(ev => ev.EntityId == "thisisit"));

            testBusRegistrationActor.Dispose();
        }
        private static EventStoreStatelessActorBuilder <TActor, TRegistry> CreateInternal(
            IActorConfiguration actorConfiguration,
            IEventStoreConnection eventStoreConnection,
            ILoggerFactory loggerFactory = null,
            Action <IEventStoreRepositoryConfiguration> eventStoreRepositoryConfigurationBuilder = null)
        {
            loggerFactory ??= new DummyLoggerFactory();

            var eventStoreRepositoryConfiguration = new EventStoreRepositoryConfiguration();

            eventStoreRepositoryConfigurationBuilder?.Invoke(eventStoreRepositoryConfiguration);

            var connectionMonitor = new EventStoreConnectionStatusMonitor(eventStoreConnection, loggerFactory);

            var eventStoreRepository = new EventStoreAggregateRepository(
                eventStoreRepositoryConfiguration,
                eventStoreConnection,
                connectionMonitor,
                loggerFactory);

            var builder = new EventStoreStatelessActorBuilder <TActor, TRegistry>(actorConfiguration, eventStoreRepository, connectionMonitor, loggerFactory);

            return(builder);
        }
        public EventStoreAggregateRepositoryTests()
        {
            var ltr = LogicalTypeRegistryBuilder.Build();

            Repo = new EventStoreAggregateRepository<ServiceCase, ServiceCaseId>(ltr, () => EventStoreConnection.Create(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1113)));
        }