Ich verwende codingwell/scala-guice
und versuche, DAO-Klassen in Konstruktoren anderer Komponenten/Klassen zu injizieren.Guice in Scala: Modul für eine Klasse, die einen DI-Konstruktor selbst hat
Im ersten Versuch, habe ich nur eine DAO-Klasse, um zu sehen, ob es funktioniert:
class DaoModule extends AbstractModule with ScalaModule {
override def configure() {
val dao1 = new FirstDaoImpl
bind(new TypeLiteral[FirstDaoTrait] {}).toInstance(dao1)
}
}
Die Bindung funktioniert wie erwartet, kann es für Konstruktor Injektion verwendet werden.
Im zweiten Schritt wollte ich dem Modul eine weitere DAO-Klasse hinzufügen. Allerdings hängt die DAO-Klasse auf dem ersten DAO:
class SecondDaoImpl @Inject()(firstDao: FirstDaoTrait) extends SecondDaoTrait
Ich bin nicht sicher, wie die notwendige Bindung an das bestehende Modul hinzuzufügen. in ergäbe dies den ersten Schritt zu wiederholen:
val dao2 = new SecondDaoImpl(???)
bind(new TypeLiteral[SecondDaoTrait] {}).toInstance(dao2)
Aber natürlich kann diese Klasse nur durch die Bereitstellung der ersten DAO (also die „???“) instanziiert werden. Wie kann ich das machen?
Danke, das funktioniert. Also ist die Verwendung des Injektors eine Alternative zur Verwendung der Konstruktoreinspritzung? Weil ich die Konstruktorinjektion nicht geändert habe und es scheint immer noch zu funktionieren. – fxlae
@JFo Es ist nur eine Möglichkeit, die Abhängigkeiten aufzulösen und war am einfachsten zu demonstrieren :) –