我一直在使用google-guice和辅助注射机制已有一段时间了。因为我在斯卡拉,只是发现scala-guice,我也有兴趣使用它。但是我对如何使用辅助注射感到困惑。没有使用辅助注射的例子。
因此,我的问题是:是否可以使用scala-guice辅助注射,如果是,请任何人提供一个简单的例子吗?
此外,对于google-guice,我使用以下库:javax.inject.jar,guice-3.0.jar,guice-assistedInject.jar。在这种情况下,我应该删除guice-3.0.jar?
答案 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,所有这些罐子都很重要。