2013-12-21 165 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