Ich denke, es gibt verschiedene Artikel, also werde ich es weglassen! Grob gesagt eine Methode zum Injizieren von Instanzen von außerhalb der Klasse, um den Grad der Kopplung zu verringern! Wenn Sie eine Schnittstelle vorbereiten und in sie einfügen, ist das Testen einfacher.
Masakari ist willkommen! !! !! Bitte lassen Sie mich wissen, wenn etwas nicht stimmt oder fehlt ...!
Ich möchte die Punkte vorstellen, bei denen ich feststeckte, als ich es zuerst auf Android einführte.
Es gab nicht genügend Möglichkeiten, die Abhängigkeit in Gradle anzugeben. Ich habe die Abhängigkeit angegeben, die zu diesem Zeitpunkt nicht erforderlich ist.
Dagger2 Official #Wie bekomme ich es? Ich habe nur die hier geschriebenen Abhängigkeiten geschrieben, nicht die Java-Abhängigkeiten.
Es war schneller, Github Read Me anzusehen als das offizielle. ..
Fügen Sie den folgenden Code hinzu, um ihn unter der App zu sortieren und zu synchronisieren.
dependencies {
...
compile 'com.google.dagger:dagger:2.14.1'
annotationProcessor 'com.google.dagger:dagger-compiler:2.14.1'
}
Jetzt können Sie die Instanz extern einspeisen. Dies ist ausreichend, wenn Sie externes Wissen (WebAPI usw.) und Infrastrukturschicht (Repository) trennen möchten. Ich habe nicht untersucht, wann dagger.android verwendet werden kann. Bitte lassen Sie mich wissen, wenn Sie m (_ _) m mögen
Erstellen Sie einfach ein Modul, definieren Sie, was Sie in die Komponente einfügen möchten, und geben Sie "@ Inject" an. Unterstützt die Feld- und Konstruktorinjektion.
Sie können sich Module als einen sogenannten DI-Container vorstellen (sollte). Die Idee ist, die Generierung von Instanzen separat auszuschneiden und an einem Ort zu verwalten.
//Es ist eine gute Idee, Module zum Suffix hinzuzufügen.
@Module
public class InfrastructureModule {
//Es ist eine gute Idee, dem Präfix "Bereitstellen" hinzuzufügen.
@singleton
@provide
public RepositoryInterafce provideXYZRepository() {
return new XYZRepository();
}
}
Ich schreibe es so. Wenn Sie "@ Singleton" angeben, behandelt Dagger die Generierung als Singleton.
Die Komponente ist eine Schnittstelle, die definiert, wo ein von Ihnen erstelltes Modul eingefügt werden soll. Schreiben Sie so.
//Es ist eine gute Idee, dem Suffix eine Komponente hinzuzufügen.
//Weil es Singleton-Instanzen behandelt@Geben Sie Singleton an. Andernfalls wird beim Erstellen ein Fehler ausgegeben.
@Singleton
@Component(Modules = {InfrastructureModule.class})
public class InfrastructureComponent {
//Der Methodenname sollte injizieren. Es ist voller Manieren, aber wenn Sie sich daran gewöhnen, können Sie Gehirnmuskeln spielen! w
void inject(FugaHoge fugaHoge);
void inject(FooBar fooBar);
}
public class FugaHoge {
//Versuchen Sie die Feldinjektion
@Inject RepositoryInterface repository;
public FugaHoge() {
//Wenn Sie Rebuild ausführen, stellen Sie das Präfix ein:Die Komponentenentität von Dagger wird automatisch generiert.
//In den Konstruktor injizieren.
DaggerInfrastructureComponent.create().inject(this);
}
}
Dadurch wird die Instanz in das Repository eingefügt.
Ende.
Recommended Posts