我想知道 Play-Scala 中的 @Inject 注释是如何工作的。它显然注入(inject)了依赖,但我很好奇它是如何工作的。当我在类扩展 Controller 上使用它并将路由生成器设置为注入(inject)路由生成器时,它似乎自动从这些类创建对象,但我如何在其他上下文中使用它?
我试过:
@Inject val mailer: MailerClient = null
但这似乎不起作用。是否有任何可能性将 @Inject 事物(即 mailerClient、WS 等)直接传递给一个值,而不是 Controller 类?
最佳答案
看起来很近。更改val
至var
因为它不是最终的,需要在后期注入(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/