Инъекция зависимостей Guice в vert.x verticle - PullRequest
0 голосов
/ 07 июня 2019

У меня проблема с пониманием того, как внедрить Guice DI в vert.x.

У меня есть очень простая вертикаль Vert.x, которая в основном должна просто запускать сервер с портом с несколькими обработчиками (сейчас есть только один).

Я пытаюсь внедрить все обработчики в мой текст с помощью Guice (сейчас у меня есть только один с именем GetAllProductTypes ). Я создал класс модуля, который расширяет AbstractModule , где я привязываю обработчики к константе HANDLERS в методе "configureHandlers" (см. Module class).

Затем в своей основной статье ( MainVerticle ) я пытаюсь внедрить этот набор обработчиков, используя аннотацию @Named ( HANDLERS ). Тем не менее, значение переменной «обработчики» в этом классе остается нулевым (что означает, что никакого внедрения не произошло).

Я действительно не знаю, как решить такую ​​ситуацию. Это единственный способ увидеть, как это должно работать, и я не уверен в альтернативах. Я помню, что мы делали это на моей предыдущей работе, однако у меня больше нет доступа, чтобы увидеть, как это было реализовано.

Основной класс Verticle:

public class MainVerticle extends AbstractVerticle {

private final Set<RxRoutingHandler> handlers;


public MainVerticle(@Named(HANDLERS) final Set<RxRoutingHandler> handlers) 
{
    this.handlers = handlers;

}
@Override
public void start() throws Exception {

    vertx.createHttpServer()
            .requestHandler(req -> req.response()
                    .end("Hello t"))
            .listen(7240);
}

Модуль Guice класс:

public class Module extends AbstractModule {

private final Context context;
public Module() {
    context = Vertx.currentContext();
    if (context == null) {
        throw new RuntimeException("No injector was run");
    }
}
@Override
protected void configure() {

    configureHandlers();

}

private void configureHandlers() {
    final Multibinder<RxRoutingHandler> handlersBinder =
            Multibinder.newSetBinder(binder(), RxRoutingHandler.class, Names.named(HANDLERS));
    handlersBinder.addBinding().to(GetAllProductTypes.class);

}

}

Мне просто нужно вставить переменную "hanlders" в класс MainVerticle, чтобы содержать обработчики (сейчас только один обработчик), которые я передаю ей.

...