Java 无法使用Macwire连接播放相关性

Java 无法使用Macwire连接播放相关性,java,scala,dependency-injection,playframework,macwire,Java,Scala,Dependency Injection,Playframework,Macwire,我有一个api服务类,它依赖于游戏的配置和WSClient实例 我不想使用@Inject()Anotion,因为我想在Macwire中使用编译时注入,所以我做了以下工作: // this is a trait that here im wiring all the dependencies that my api service needs trait ApiDependencies { lazy val conf: Configuration = wire[Configuration]

我有一个api服务类,它依赖于游戏的配置和WSClient实例

我不想使用@Inject()Anotion,因为我想在Macwire中使用编译时注入,所以我做了以下工作:

// this is a trait that here im wiring all the dependencies that my api service needs
trait ApiDependencies {

  lazy val conf: Configuration = wire[Configuration]
  lazy val wsc: WSClient = wire[WSClient]

}


// this is the api service

class ApiService extends ApiDependencies {

  def getInfo (id: String): Future[Option[Info]] = {
    wsc.url("...").withHttpHeaders(("Content-Type", "application/json")).get.map { response =>
      response.status match {
        case Status.OK => ...
        case Status.NO_CONTENT => ...
        case _ => throw new Exception()
      }
    }
  }
}
但我得到一个编译器错误:

错误:找不到类型为:[com.typesafe.config.config]的值
lazy val conf:Configuration=wire[Configuration]

错误:找不到的公共构造函数或伴随对象 [play.api.libs.ws.WSClient]lazy val wsc:WSClient=wire[WSClient]

有人知道我如何解决这个问题吗。。。?为什么会这样:/


谢谢

配置
是一种playframework配置,它是类型安全的。引述:

Play使用的配置文件基于

您得到的异常正好告诉您-macwire无法创建
配置
的实例,因为范围中没有
配置
实例

要修复它,您显然需要提供这样的安装。最简单的方法可能如下所示:

import com.typesafe.config.{Config, ConfigFactory}
trait ApiDependencies {
    lazy val configuration: Config = ConfigFactory.load()
    lazy val conf: Configuration = wire[Configuration]
}
trait ApiDependencies {
  lazy val conf: Configuration = wire[Configuration]
  lazy val wsc: WSClient = wire[NingWSClient]
}
请注意,
ConfigFactory.Load()
基本上使用默认配置文件(
application.conf
),并且它考虑了中描述的配置覆盖技术,因为它实际上是由typesafe配置库(来自typesafe配置GitHub自述文件)提供的:

用户可以使用Java系统属性Java-Dmyapp.foo.bar=10覆盖配置


关于
WSClient
:这是因为
WSClient
不是一个类,而是一个类。您需要连接实际的实现,例如,
NingWSClient
,如下所示:

import com.typesafe.config.{Config, ConfigFactory}
trait ApiDependencies {
    lazy val configuration: Config = ConfigFactory.load()
    lazy val conf: Configuration = wire[Configuration]
}
trait ApiDependencies {
  lazy val conf: Configuration = wire[Configuration]
  lazy val wsc: WSClient = wire[NingWSClient]
}

有关实现类的列表,请参见scaladoc(在“所有已知实现类”下)-在编写本文时,只有
NingWSClient
AhcWSClient
。哪一个更好是一个不同的问题(可能是基于观点的问题)。

对于WSClient错误,您是否也有答案:/@J0HN@JohnBigs我已经更新了答案-请看一看,如果有帮助请告诉我