PresenterFactory discover() {
        Iterable<PresenterFactory> discoveredFactories = PresenterFactory.discover();
        List<PresenterFactory> factories = StreamSupport.stream(discoveredFactories.spliterator(), false).
                collect(Collectors.toList());
        if (factories.isEmpty()) {
            return Injector::instantiatePresenter;
        }

        if (factories.size() == 1) {
            return factories.get(0);
        } else {
            factories.forEach(System.err::println);
            throw new IllegalStateException("More than one PresenterFactories discovered");
        }

    }