Dropwizard и Guice: инъекционная среда

В настоящее время я создаю приложение Dropwizard + Guice + Jersey, в котором доступ к базе данных в настоящее время обрабатывается JDBI.

Я пытаюсь добиться вашей типичной корпоративной архитектуры, где Ресурсы обращаются к классам Сервиса, обращаясь к классу DAO, который, в свою очередь, обращается к базе данных. Было бы хорошо, чтобы все это было правильно подключено, хотя я думаю, что смогу построить свой граф объектов в методе run () приложения, если все остальное не получится.

Итак, я сталкиваюсь с этой проблемой, которая была упомянута здесьдоДля получения DBIFactory требуется среда и конфигурация, которые должны быть доступны в то время, когда Guice выполняет инъекцию, а не во время выполнения ().

Будучи Dropwizard и Guice noob, я сумел собрать до сих пор то, что мне нужен провайдер для моих объектов DAO, что-то вроде мелодии

public class UserDAOProvider implements Provider<UserDAO> {

    @Inject
    Environment environment;
    @Inject
    Configuration configuration;

    @Override
    public UserDAO get() {
        final DBIFactory factory = new DBIFactory();
        final (MyConfiguration) config = (MyConfiguration) configuration;
        DBI jdbi = null;
        try {
            jdbi = factory.build(environment, config.getDataSourceFactory(),
                    "mysql");
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return jdbi.onDemand(UserDAO.class);
    }

}

Регистрация этого как единственного поставщика должна позволить мне тогда ввести UserDAO в мои Услуги.

Теперь, как мы на самом деле внедряем среду в провайдера? В настоящее время я застрял в Guice, жалуясь на то, что не нашел подходящего конструктора для Environment, поэтому он пытается создать его экземпляр, а не получить его от самого Dropwizard.

Кажется, что это выполнимо; Здесьdropwizard-Guice пакет, у которого DropWizardEnvironmentModule, я думаю, что мне нужно. Но я чувствую, что мне здесь не хватает какой-то части головоломки, чтобы понять, как все сложить. Мне не удалось найти полный рабочий пример ...

Ответы на вопрос(3)

Ваш ответ на вопрос