Может ли Guice вводить объекты Scala В Scala можно ли использовать Guice для ввода Scala object s? Например, можно ли вставлять в s в следующий объект? object GuiceSpec { @Inject val s: String = null def get() = s } Ответ 1 Некоторые исследования в Google (см. этот пост) показали, что вы можете выполнить это следующим образом (следующий код - ScalaTest unit test): 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 } Предполагается, что вы используете scala-guice и ScalaTest. Ответ 2 Вышеприведенный ответ правильный, но если вы не хотите использовать ScalaGuice Extensions, вы можете сделать следующее: val injector = Guice.createInjector(new ScalaModule() { def configure() { bind[String].toInstance("foo") } @Provides def guiceSpecProvider: GuiceSpec.type = GuiceSpec })
Ответ 1 Некоторые исследования в Google (см. этот пост) показали, что вы можете выполнить это следующим образом (следующий код - ScalaTest unit test): 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 } Предполагается, что вы используете scala-guice и ScalaTest.
Ответ 2 Вышеприведенный ответ правильный, но если вы не хотите использовать ScalaGuice Extensions, вы можете сделать следующее: val injector = Guice.createInjector(new ScalaModule() { def configure() { bind[String].toInstance("foo") } @Provides def guiceSpecProvider: GuiceSpec.type = GuiceSpec })