5

很长一段时间以来,我一直在使用带有辅助注入机制的 google-guice。因为我在 scala 中,只是发现了 scala-guice,我也有兴趣使用它。但是,我对如何使用辅助注射感到困惑。没有使用辅助注射的例子。

因此我的问题是:是否可以在 scala-guice 中使用辅助注射,如果可以,请有人提供一个简单的例子吗?

此外,对于 google-guice,我使用以下库:javax.inject.jar、guice-3.0.jar、guice-assistedInject.jar。在这种情况下,我应该删除 guice-3.0.jar 吗?

4

1 回答 1

12

在 Scala 中使用辅助注入绝对是可能的。如果 scala-guice 没有为它提供工具,你可以直接使用辅助注入 API:

trait Entity { ... }

class EntityImpl @Inject (
  @Assisted assistedDep: AssistedDependency, 
  normalDep: NormalDependency
) extends Entity { ... }

trait EntityFactory {
  def create(assistedDep: AssistedDependency): Entity
}

class YourModule extends AbstractModule with ScalaModule {
  def configure {
    install(new FactoryModuleBuilder()
      .implement(classOf[Entity], classOf[EntityImpl])
      .build(classOf[EntityFactory])
    )
    bind[NormalDependency].to[NormalDependencyImpl]
  }
}

的确,它不是很漂亮,但它完成了工作。

此外,您绝对不应该删除guice-3.0.jar. 当初为什么会想到?javax.inject.jar包含 JSR-330 注释,guice-3.0.jar包含 Guice 本身,并guice-assistedinject-3.0.jar包含辅助注入扩展。如果您需要带有辅助注入支持的 Guice,所有这些罐子都很重要。

于 2013-12-22T21:06:26.400 回答