private Configuration()
        {
            _bus = new MessageBus();
            var eventStore = new SqlEventStore(_bus);
            var repository = new DomainRepository(eventStore);

            var commandService = new AccountApplicationService(repository);
            _bus.RegisterHandler<RegisterAccountCommand>(commandService.Handle);
            _bus.RegisterHandler<DebitAccountCommand>(commandService.Handle);
            _bus.RegisterHandler<UnlockAccountCommand>(commandService.Handle);

            var infoProjection = new AccountInfoProjection();
            _bus.RegisterHandler<AccountRegisteredEvent>(infoProjection.Handle);
            _bus.RegisterHandler<AccountLockedEvent>(infoProjection.Handle);
            _bus.RegisterHandler<AccountUnlockedEvent>(infoProjection.Handle);

            var balanceProjection = new AccountBalanceProjection();
            _bus.RegisterHandler<AccountRegisteredEvent>(balanceProjection.Handle);
            _bus.RegisterHandler<AccountDebitedEvent>(balanceProjection.Handle);

            var notification = new NotificationProjection();
            _bus.RegisterHandler<AccountRegisteredEvent>(notification.Handle);
            _bus.RegisterHandler<AccountDebitedEvent>(notification.Handle);
            _bus.RegisterHandler<AccountLockedEvent>(notification.Handle);
            _bus.RegisterHandler<AccountUnlockedEvent>(notification.Handle);
            _bus.RegisterHandler<OverdrawAttemptedEvent>(notification.Handle);

            _readModel = new ReadModelFacade(balanceProjection, infoProjection, notification);

            var events = eventStore.GetAllEventsEver();
            _bus.Publish(events);
        }
        private Configuration()
        {
            _bus = new MessageBus();
            var eventStore = new SqlEventStore(_bus);
            var repository = new DomainRepository(eventStore);

            var commandService = new AccountApplicationService(repository);

            _bus.RegisterHandler <RegisterAccountCommand>(commandService.Handle);
            _bus.RegisterHandler <DebitAccountCommand>(commandService.Handle);
            _bus.RegisterHandler <UnlockAccountCommand>(commandService.Handle);

            var infoProjection = new AccountInfoProjection();

            _bus.RegisterHandler <AccountRegisteredEvent>(infoProjection.Handle);
            _bus.RegisterHandler <AccountLockedEvent>(infoProjection.Handle);
            _bus.RegisterHandler <AccountUnlockedEvent>(infoProjection.Handle);

            var balanceProjection = new AccountBalanceProjection();

            _bus.RegisterHandler <AccountRegisteredEvent>(balanceProjection.Handle);
            _bus.RegisterHandler <AccountDebitedEvent>(balanceProjection.Handle);

            var notification = new NotificationProjection();

            _bus.RegisterHandler <AccountRegisteredEvent>(notification.Handle);
            _bus.RegisterHandler <AccountDebitedEvent>(notification.Handle);
            _bus.RegisterHandler <AccountLockedEvent>(notification.Handle);
            _bus.RegisterHandler <AccountUnlockedEvent>(notification.Handle);
            _bus.RegisterHandler <OverdrawAttemptedEvent>(notification.Handle);

            _readModel = new ReadModelFacade(balanceProjection, infoProjection, notification);

            var events = eventStore.GetAllEventsEver();

            _bus.Publish(events);
        }