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