Scala 中的@Inject 是如何工作的
How does @Inject in Scala work
我想知道 Play-Scala 中的 @Inject 注释是如何工作的。它显然注入了依赖性,但我很好奇它是如何工作的。当我在 class 上使用它扩展控制器并将路由生成器设置为 injectroutesgenerator 时,它似乎从那些 classes 自动创建对象,但我如何在其他上下文中使用它?
我试过了:
@Inject val mailer: MailerClient = null
但这似乎不起作用。是否有任何可能性将 @Inject 事物(即 mailerClient、WS 等)直接注入一个值,而不是控制器 class?
看起来很接近。将val
改为var
,因为不是final,需要后期注入
@Inject var mailer: MailerClient = null
我还要检查 MailerClient
库是否作为项目配置中的依赖项被提及。您可以尝试使用 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))
}
}
我想知道 Play-Scala 中的 @Inject 注释是如何工作的。它显然注入了依赖性,但我很好奇它是如何工作的。当我在 class 上使用它扩展控制器并将路由生成器设置为 injectroutesgenerator 时,它似乎从那些 classes 自动创建对象,但我如何在其他上下文中使用它?
我试过了:
@Inject val mailer: MailerClient = null
但这似乎不起作用。是否有任何可能性将 @Inject 事物(即 mailerClient、WS 等)直接注入一个值,而不是控制器 class?
看起来很接近。将val
改为var
,因为不是final,需要后期注入
@Inject var mailer: MailerClient = null
我还要检查 MailerClient
库是否作为项目配置中的依赖项被提及。您可以尝试使用 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))
}
}