24

Scala では、Guiceを使用して Scala を注入できobjectますか?

sたとえば、次のオブジェクトに注入できますか?

object GuiceSpec {
  @Inject
  val s: String = null

  def get() = s
}
4

2 に答える 2

21

Google でのいくつかの調査では、これを次のように実行できることが明らかになりました (次のコードはScalaTest単体テストです)。

import org.junit.runner.RunWith
import org.scalatest.WordSpec
import org.scalatest.matchers.MustMatchers
import org.scalatest.junit.JUnitRunner
import com.google.inject.Inject
import com.google.inject.Module
import com.google.inject.Binder
import com.google.inject.Guice
import uk.me.lings.scalaguice.ScalaModule

@RunWith(classOf[JUnitRunner])
class GuiceSpec extends WordSpec with MustMatchers {

  "Guice" must {
    "inject into Scala objects" in {
      val injector = Guice.createInjector(new ScalaModule() {
        def configure() {
          bind[String].toInstance("foo")
          bind[GuiceSpec.type].toInstance(GuiceSpec)
        }
      })
      injector.getInstance(classOf[String]) must equal("foo")
      GuiceSpec.get must equal("foo")
    }
  }
}

object GuiceSpec {
  @Inject
  var s: String = null

  def get() = s
}

これは、scala-guiceScalaTestを使用していることを前提としています。

于 2012-12-09T21:05:20.483 に答える