Ich möchte eine Kette von Verarbeitungselementen leiten und sie über Guice miteinander verbinden. Lassen Sie uns den folgenden Pfad übernehmen:Guice assistierte Injektion tiefer in die Abhängigkeitshierarchie
interface A
implementiert durchclass AImpl
braucht eine Eingabeinterface B
implementiert durchclass BImpl
BedürfnisseA
interface C
implementiert durchclass CImpl
BedürfnisseB
interface D
implementiert durchclass DImpl
BedürfnisseC
Die Abhängigkeit von A kann nur zur Laufzeit und nicht zur Konfigurationszeit gelöst werden. Die übliche Vorgehensweise wäre Assisted Injection in diesem Fall zu verwenden, um eine Fabrik zu erstellen, die die fehlenden Instanzen als Parameter nehmen, so wie diese:
public interface AFactory {
public A createA(String input);
}
Aber was ich will eigentlich so etwas wie diese:
public interface DFactory {
public D createD(String inputForA);
}
Ich möchte AImpl
-spezifische Abhängigkeiten nicht durch die gesamte Hierarchie manuell übergeben. Ist es möglich, dies mit Guice zu erreichen? Wenn nicht, was ist der beste Weg, um dieses Problem elegant zu umgehen, während die Vorteile der Injektion erhalten bleiben?
Ich muss mich an meine Zustimmung erinnern, weil: "Injektionsversuche für A, B , C und D werden außerhalb von PipelineRunner fehlschlagen, wenn keine @PipelineInput-Zeichenfolge vorhanden ist "Dies funktioniert nicht, da Guice Injectors zur Konfigurationszeit überprüft und fehlschlägt, sobald eine nicht erfüllte Bindung erkannt wird, weshalb Sie fast keine erstellen können kompletter Injektor, der von seinem Kind vervollständigt wird. Private Module überwinden dies mit einem speziellen Bindemittel. – orsg
Mein Fehler; Sie müssen A, B, C und D an die Konstante binden. Trivial zu beheben, obwohl. Antwort aktualisiert –
Okay, also muss ich alles, was mit der Pipeline zusammenhängt, ausschließlich innerhalb des Kind-Injektors binden und der Eltern-Injektor kennt nur die Fabrik ("PipelineRunner"). – orsg