2013-12-21 137 views
5

我一直在使用谷歌guice与辅助注射机制相当长一段时间了。因为我在scala,只是发现scala-guice,我也有兴趣使用它。不过,我很困惑如何使用辅助注射。没有使用辅助注射的例子。scala-guice和辅助注射

因此在这里我的问题是:是否有可能,使用辅助注射斯卡拉 - 吉斯如果是,请任何人都可以提供一个简单的例子吗?

而且为谷歌-吉斯我使用下面的库:javax.inject.jar,吉斯-3.0.jar,吉斯-assistedInject.jar。在这种情况下,我应该删除guice-3.0.jar吗?

回答

12

它是通过各种手段可以使用辅助注射Scala中。如果斯卡拉 - 吉斯不为它提供的工具,你就可以直接使用辅助注射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辅助注射支持,所有这些罐子都很重要。

+0

明白了,谢谢! – MaatDeamon

+0

@MaatDeamon,如果答案是狡猾的,你应该接受它。这就是Stackoverflow的工作原理。 –

+0

如果您要将注入的类转换为工厂辅助类,请不要忘记从模块中删除旧的绑定,因为Guice将不再知道如何创建它。 – JMess