首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能与Macwire玩依赖线

不能与Macwire玩依赖线
EN

Stack Overflow用户
提问于 2017-07-04 11:37:02
回答 1查看 1.1K关注 0票数 2

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

我不想使用@Inject()指定,因为我想在Macwire中使用编译时注入,所以我所做的是:

代码语言:javascript
复制
// 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的值 惰性val : Configuration = wireConfiguration 错误:找不到公共构造函数或play.api.libs.ws.WSClient懒val的伴生对象: WSClient = wireWSClient

有人知道我该怎么解决这个问题吗?以及为什么会发生这样的事情

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2017-07-04 13:30:48

Configuration是一个游戏框架配置,内部用途 Typesafe的配置库。引用Playframework文档

Play使用的配置文件基于Typesafe配置库

您所得到的异常告诉您,由于作用域中没有Configuration实例,因此macwire无法创建Config实例。

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

代码语言:javascript
复制
import com.typesafe.config.{Config, ConfigFactory}
trait ApiDependencies {
    lazy val configuration: Config = ConfigFactory.load()
    lazy val conf: Configuration = wire[Configuration]
}

请注意,ConfigFactory.Load()基本上使用默认配置文件(application.conf),确实考虑了Play的配置文档中描述的配置覆盖技术,因为它实际上是由typesafe配置库(来自Typesafe config GitHub自述)提供的:

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

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

代码语言:javascript
复制
trait ApiDependencies {
  lazy val conf: Configuration = wire[Configuration]
  lazy val wsc: WSClient = wire[NingWSClient]
}

有关实现类的列表(在“所有已知的实现类”下),请参见WSClient scaladoc --在编写本报告时,只有NingWSClientAhcWSClient。哪一个更好是另一个问题(也可能是基于观点的问题)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44904938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档