scala-guice和辅助注射

时间:2013-12-21 18:00:12

标签: scala guice assisted-inject

我一直在使用google-guice和辅助注射机制已有一段时间了。因为我在斯卡拉,只是发现scala-guice,我也有兴趣使用它。但是我对如何使用辅助注射感到困惑。没有使用辅助注射的例子。

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

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

1 个答案:

答案 0 :(得分: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,所有这些罐子都很重要。