scala guice

Puede Guice inyectar objetos Scala



(2)

En Scala, ¿puedo usar Guice para inyectar object Scala?

Por ejemplo, ¿puedo inyectar en s en el siguiente objeto?

object GuiceSpec { @Inject val s: String = null def get() = s }


Algunas investigaciones en Google (ver esta publicación ) revelaron que puede lograr esto de la siguiente manera (el siguiente código es una prueba de unidad de 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 val s: String = null def get() = s }

Esto supone que está utilizando scala-guice y ScalaTest .


La respuesta anterior es correcta, pero si no desea utilizar ScalaGuice Extensiones ScalaGuice , puede hacer lo siguiente:

val injector = Guice.createInjector(new ScalaModule() { def configure() { bind[String].toInstance("foo") } @Provides def guiceSpecProvider: GuiceSpec.type = GuiceSpec })