2013-12-21 18 views
5

Ich benutze google-guice mit dem assistierten inject-Mechanismus seit geraumer Zeit. Da ich in Scala bin und Scala-Guice gerade entdecke, bin ich daran interessiert, es auch zu benutzen. Jedoch bin ich verwirrt, wie man assistierte Einspritzung damit verwendet. Es gibt kein Beispiel für die Verwendung einer assistierten Injektion.scala-guice und assistierte Injektion

Daher ist meine Frage hier: ist es möglich, assistierte Injektion mit Scala-Guice zu verwenden, wenn ja, bitte könnte jemand ein einfaches Beispiel zur Verfügung stellen?

Darüber hinaus verwende ich für google-guice die folgenden libs: javax.inject.jar, guice-3.0.jar, guice-assistedInject.jar. In diesem Fall soll ich einfach guice-3.0.jar entfernen?

Antwort

12

Es ist auf jeden Fall möglich, assistierte Injektion in Scala zu verwenden. Wenn scala-guice Werkzeuge nicht für sie zur Verfügung stellt, können Sie einfach unterstützt verwenden inject API direkt:

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] 
    } 
} 

Es stimmt, es ist nicht sehr hübsch, aber es wird die Arbeit getan.

Sie sollten auch nicht guice-3.0.jar entfernen. Warum hast du überhaupt daran gedacht? javax.inject.jar enthält JSR-330-Annotationen, guice-3.0.jar enthält Guice selbst und guice-assistedinject-3.0.jar enthält assistierte Injektionsverlängerung. Alle diese Gläser sind wichtig, wenn Sie Guice mit assistierter Injektionsunterstützung benötigen.

+0

Verstanden, danke !!! – MaatDeamon

+0

@MaatDeamon, wenn die Antwort helful ist, sollten Sie es akzeptieren. So funktioniert Stackoverflow. –

+0

Wenn Sie eine eingefügte Klasse in eine werkseitig unterstützte Klasse konvertieren, vergessen Sie nicht, die alte Bindung aus Ihrem Modul zu entfernen, da Guice nicht mehr wissen wird, wie es erstellt wird. – JMess