0

我正在尝试在模块内使用带有 play 2.7.4 的 WS 客户端,但遇到了问题。我不想像这里描述的那样自己创建客户端,而是使用 guice 依赖注入它。这似乎不起作用,我的实例为空。如果我在模块外使用 WS 客户端,一切正常。

根据我在此处阅读的内容,此时模块内只有 Config 和 Environment 可用,还没有其他绑定。

有什么办法可以做到这一点?


[编辑 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

}
4

1 回答 1

0

我想你可能需要更进一步

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

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

或者您必须在提供程序方法中手动注入:

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

一旦你创建了注射器。

于 2020-07-29T16:43:52.543 回答