一个模块内玩WS客户端
Play WS client within a module
我正在尝试在模块内使用 WS 客户端和 play 2.7.4,但我 运行 遇到了问题。我宁愿不按照 here 中的描述自己创建客户端,而是使用 guice 进行依赖注入。这似乎不起作用,我的实例为空。如果我在模块外使用 WS 客户端,一切正常。
根据我的阅读,here此时模块中只有配置和环境可用,还没有绑定任何其他内容。
有什么办法可以实现吗?
[编辑 1]
我从 中了解到的是创建一个像这样的提供程序 class 我通常注入它的地方
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
}
我想你可能需要更进一步
public class ObjectAProvider implement Provider<ObjectA> {
@Inject
WSClient wsClient;
public ObjectA get() {
return new ObjectA(wsClient);
}
}
或者您必须在提供程序方法中手动注入:
ObjectA objectA = injector.getInstance(ObjectA.class);
return objectA;
创建注入器后。
我正在尝试在模块内使用 WS 客户端和 play 2.7.4,但我 运行 遇到了问题。我宁愿不按照 here 中的描述自己创建客户端,而是使用 guice 进行依赖注入。这似乎不起作用,我的实例为空。如果我在模块外使用 WS 客户端,一切正常。
根据我的阅读,here此时模块中只有配置和环境可用,还没有绑定任何其他内容。
有什么办法可以实现吗?
[编辑 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
}
我想你可能需要更进一步
public class ObjectAProvider implement Provider<ObjectA> {
@Inject
WSClient wsClient;
public ObjectA get() {
return new ObjectA(wsClient);
}
}
或者您必须在提供程序方法中手动注入:
ObjectA objectA = injector.getInstance(ObjectA.class);
return objectA;
创建注入器后。