Java 无法使用Macwire连接播放相关性
我有一个api服务类,它依赖于游戏的配置和WSClient实例 我不想使用@Inject()Anotion,因为我想在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]
// 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我已经更新了答案-请看一看,如果有帮助请告诉我