Воспроизведение клиента WS в модуле

Я пытаюсь использовать клиент WS с игрой 2.7.4 внутри модуля, и у меня возникают проблемы. Я бы предпочел не создавать клиент самостоятельно, как описано здесь а скорее зависимость вводит его с помощью guice. Кажется, это не работает, мой экземпляр нулевой. Если я использую клиент WS вне модуля, все работает.

Согласно тому, что я прочитал здесь, доступны только Config и Environment. point внутри модуля, больше ничего не привязано.

Есть ли способ добиться этого?


[править 1]

Из этого ответа я понимаю, что нужно создать такой класс провайдера, куда я обычно его ввожу

public class WSClientProvider implements Provider<WSClient> {

WSClient wsClient;

@Inject
public WSClientProvider(WSClient wsClient) {
    this.wsClient = wsClient;
}

@Override
public WSClient get() {
    return wsClient;
}

}

а затем внутри модуля, чтобы просто связать его вот так

bind(WSClient.class).toProvider(WSClientProvider.class);

Но это не работает в моем случае. Что мне здесь не хватает?


[править 2]

Это мой модуль на данный момент

public class SecurityModule extends AbstractModule {

private final Environment environment;
private final Config configuration;

public SecurityModule(final Environment environment, final Config configuration) {
    this.environment = environment;
    this.configuration = configuration;
}

@Override
protected void configure() {
    ...some bindings...
}

@Provides
private ObjectA provideMyObjectA() {
    return new ObjectA(); <-- we want to inject the WSClient inside this object

}

person kopelitsa    schedule 27.07.2020    source источник
comment
Можете ли вы опубликовать полный исходный код модуля?   -  person Tim Moore    schedule 28.07.2020
comment
@TimMoore Добавлено, становится ли это яснее?   -  person kopelitsa    schedule 29.07.2020


Ответы (1)


Я думаю, вам, возможно, нужно немного больше

public class ObjectAProvider implement Provider<ObjectA> {
     @Inject
     WSClient wsClient;

     public ObjectA get() {
          return new ObjectA(wsClient);
     }
}

Или вам придется вручную вводить в метод провайдера:

ObjectA objectA = injector.getInstance(ObjectA.class);
return objectA;

После того, как вы создали инжектор.

person kendavidson    schedule 29.07.2020
comment
Это исправило это! Мне действительно нужно было преобразовать @Provides для ObjectA в отдельный класс провайдера и внедрить туда WSClient. - person kopelitsa; 29.07.2020