0

我正在尝试在 play 2.4 中使用 JavaWs,因为我已将 javaWs 添加到依赖项

然后添加@Inject static WSClient ws;到我的控制器中。

但问题是,如果我这样做

Logger.info(ws);

在我的控制器方法中,它在控制台中打印 null。我似乎无法弄清楚这个问题,因为如果它是依赖问题,那么将WsClient不会被导入。

有什么我想念的吗?

4

1 回答 1

1

根据Guice 文档,不推荐使用静态注入,这应该是使用它的特殊原因。为了使用静态注入,您应该添加到模块配置以下:

 requestStaticInjection(WSClient.class); 

但相反,我建议只从 WSClient ws 中删除静态。

最好使用 Provider 注入代替。在这种情况下,WSClient 只有在真正需要时才会被实例化。注入:

@Inject
private Provider<WSClient> wsProvider; 

创建 WSClient:

WSRequest request = wsProvider.get().url("url");

此外,如果您打算对控制器进行单元测试,则直接注入 WSClient 可能会出现问题。

你可以在这篇文章中阅读更多关于 Play 注入的信息;尽管这篇文章提到了 Play 2.5,但 2.4 的所有想法也是相似的。

于 2017-01-06T08:34:11.640 回答