static void Main(string[] args)
        {
            var eventStore = new EventStoreMock();
            var keyStore   = new KeyStoreMock();
            var repository = new EventRepository(eventStore, keyStore);

            UserRegistrationCommandService = new UserRegistrationCommandService(repository);
            UserRegistrationQueryService   = new UserRegistrationQueryService(repository);

            while (!ExitCommandGiven)
            {
                Parser
                .Default
                .ParseArguments <AddOptions, VerifyOptions, SearchOptions, ExitOptions>(args)
                .MapResult(
                    (AddOptions options) => Add(options).Result,
                    (VerifyOptions options) => Verify(options).Result,
                    (SearchOptions options) => Search(options).Result,
                    (ExitOptions _) => Exit(),
                    errors => 1);

                Console.WriteLine("Provide a command or type help for options");
                args = Console.ReadLine().Split(' ');
            }
        }
        public void Initialize()
        {
            EventStore = new EventStoreMock();
            KeyStore   = new KeyStoreMock();

            var eventRepository = new EventRepository(EventStore, KeyStore);

            UserRegistrationCommandService = new UserRegistrationCommandService(eventRepository);
            UserRegistrationQueryService   = new UserRegistrationQueryService(eventRepository);
        }
        private void before_each()
        {
            var node = EmbeddedEventStore.Start();

            var connectionSettings = ConnectionSettings
                                     .Create()
                                     .SetDefaultUserCredentials(new UserCredentials("admin", "changeit"));

            var connection = EmbeddedEventStoreConnection.Create(node, connectionSettings);

            connection.ConnectAsync().Wait();

            var eventSerializer = new EventSerializer();
            var userRegistrationProcessRepository = new UserRegistrationProcessRepository(connection, eventSerializer);
            var userByEmailInMemoryIndex          = new UserByEmailIndex(connection, eventSerializer);

            var commandService = new UserRegistrationCommandService(userRegistrationProcessRepository);
            var queryService   = new UserRegistrationQueryService(userRegistrationProcessRepository);

            var userRepository = new UserRepository(connection, eventSerializer);

            var userRegistrationEventHandler = new UserRegistrationEventHandler(
                userRegistrationProcessRepository,
                userRepository,
                userByEmailInMemoryIndex);

            var userRegistrationEventHandlerAdapter = new UserRegistrationEventHandlerAdapter(userRegistrationEventHandler);
            var subscriptionStarter = new EventStoreSubscriptionStarter(eventSerializer, userRegistrationEventHandlerAdapter);
            var subscription        = subscriptionStarter.Start(connection);

            _node           = node;
            _connection     = connection;
            _commandService = commandService;
            _queryService   = queryService;
            _subscription   = subscription;
        }