Ich habe ein Guice-basiertes Projekt mit Vanille Guice; kein Assisted-Inject, kein AOP, kein zusätzliches Plugin zur Erweiterung von Guice, etc. Um es einfacher unter Android laufen zu lassen, scheint Dolch eine bessere Lösung zu sein. Jede Klasse hat eine Abhängigkeit und einen Konstruktor mit @Inject
Annotation. Es wird keine Feld- oder Methodeninjektion verwendet.Migrieren eines Guice-basierten Projekts zu Dagger
Die Module ganz einfach sind (was Guice zuviel des Guten) und enthalten meist Bindungen wie folgt aus:
class SomethingModule extends AbstractModule {
protected void configure() {
Bind(Handler.class)
.annotatedWith(Names.named("something"))
.to(SomeImplementation.class);
}
}
}
Und später verwendet wie folgt aus:
Injector inj = Guice.createInjector(new SomethingModule());
... = inj.getInstance(SampleInterface.class);
// and rest of the code.
Leider kann ich nicht bekomme meinen Kopf um Daggers terminology. Kannst du mich mit einer direkten Übersetzung/Transformation eines Guice-Moduls zu einem Dagger-Modul führen?
Dagger hat:
- Dolch der Komponenten.
- Dolch-Module.
@Provides
@Inject
Guice hat:
@Inject
@Named
(oder irgendeine benutzerdefinierte Anmerkung, wenn es richtig implementiert).- Unsere Module erweitern
AbstractModule
. @Provides
in den Modulen.- Guice
Injector
erstellt von Modulen.
Wie hängen diese zusammen?
Update: Zusätzlich zu der netten Antwort von EpicPandaForce kann these slides auch helfen.
Nitpick: a näher Dagger Äquivalent 'bind (X.class) .DE (Y.class)' 'ist @Provides ProvideX X (Y y) {y zurückzukehren; } ' –
@TavianBarnes aber wo würde das Modul eine Instanz von 'Y' erhalten? Du musst es irgendwo erstellen. – EpicPandaForce
Wenn 'Y' einen '@ Inject'-Konstruktor hat, wird dieser automatisch aufgerufen –