2012-12-09 11 views
17

In Scala, kann ich Guice Scala object s injizieren?Dose Guice injizieren Scala Objekte

Zum Beispiel, kann ich in das folgende Objekt s injizieren?

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 
} 

Dies setzt voraus, Sie verwenden scala-guice und ScalaTest:

object GuiceSpec { 
    @Inject 
    val s: String = null 

    def get() = s 
} 

Antwort

16

Einige Forschungsergebnisse auf Google (siehe this post) ergab, dass Sie dies wie folgt erreichen können (der Code, der ScalaTest Unit-Test folgt, ist a) .

+0

die Antwort in dem unten stehenden Beitrag schlägt vor, es nicht möglich ist, Abhängigkeiten in scala zu injizieren Objekt. Irgendeine Idee dazu? http://stackoverflow.com/questions/31100534/can-we-use-google-guice-di-with-a-scala-object-instead-of-ascala-class-in-play –

1

Die obige Antwort ist richtig, aber wenn Sie nicht ScalaGuice Erweiterungen verwenden möchten, können Sie folgendes tun:

val injector = Guice.createInjector(new ScalaModule() { 
    def configure() { 
     bind[String].toInstance("foo") 
    } 

    @Provides 
    def guiceSpecProvider: GuiceSpec.type = GuiceSpec 
    }) 
+0

anstelle von @ Bietet an, dass Sie einfach requestInjection (guideSpec) in configure() hinzufügen können –

Verwandte Themen