scala - Scala 中的@Inject 是如何工作的

标签 scala playframework dependency-injection playframework-2.0

我想知道 Play-Scala 中的 @Inject 注释是如何工作的。它显然注入(inject)了依赖,但我很好奇它是如何工作的。当我在类扩展 Controller 上使用它并将路由生成器设置为注入(inject)路由生成器时,它似乎自动从这些类创建对象,但我如何在其他上下文中使用它?

我试过:

@Inject val mailer: MailerClient = null

但这似乎不起作用。是否有任何可能性将 @Inject 事物(即 mailerClient、WS 等)直接传递给一个值,而不是 Controller 类?

最佳答案

看起来很近。更改valvar因为它不是最终的,需要在后期注入(inject)。

@Inject var mailer: MailerClient = null

我还要检查 MailerClient library 在项目配置中被称为依赖项。你可以试试 WSClient而是因为它默认包含在模板中:
@Inject var ws: WSClient = null

特别是我知道这个特别有效。

更新

创建了 demo on GitHub这是Play-Scala带有 index 的模板方法更改如下:
import play.api._
import play.api.libs.ws.WSClient
import play.api.mvc._
import play.api.libs.concurrent.Execution.Implicits.defaultContext

class Application extends Controller {

  @Inject var ws: WSClient = null

  def index = Action.async {
    ws.url("http://google.com").get.map(r => Ok(r.body))
  }

}

关于scala - Scala 中的@Inject 是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30952505/

相关文章:

scala - Play-json 2.7.1 : java. lang.NoSuchMethodError

scala - 如何从特征访问参数?

scala - Spark 中的星期几日期格式字符串 java

java - 无法编写类路由器/路由

scala - Play Framework/Scala 表单中特定于字段的错误消息

c# - 使用 new 运算符创建对象/依赖项与使用 DI 容器

c# - 默认依赖注入(inject)?

scala - ne 是比 != 更好的检查 null 的方法吗?

playframework - 超时后中断 Play 2 中的长时间计算

java - 注入(inject)设置还是加载一次全局查找?