2017-03-31 4 views
0

Ich lerne dagger2 Abhängigkeitsinjektionsrahmen. Ich liebte es, wie es Abhängigkeit einbringt. Ich lese diesen Artikel https://github.com/codepath/android_guides/wiki/Dependency-Injection-with-Dagger-2 Ich sehe dort, sie erklärten dies mit Hilfe von zwei Modules.Wie eine Instanz unseres Abhängigkeitsgraphen in Dagger2 zu instanziieren

AppModule & NetModule sind die beiden Modules. Beide hat Konstrukteure, so dass sie instanziiert eine Instanz unseres Abhängigkeitsgraphen wie diese

mNetComponent = DaggerNetComponent.builder() 
       // list of modules that are part of this component need to be created here too 
       .appModule(new AppModule(this)) // This also corresponds to the name of your module: %component_name%Module 
       .netModule(new NetModule("https://api.github.com")) 
       .build(); 

Angenommen, ich habe ein mehr Modules, die einen Konstruktor haben nicht dann, wie würde ich es initialisieren, wie andere 2 Module Werte im Konstruktor brauchen ?

Dank

Antwort

2

Wenn Ihr drittes Modul Dagger2 keinen Konstruktor benötigen wird es automatisch auf Komponente hinzufügen, wenn Sie es in @Component ‚s modules wie diese Liste:

@Component(modules = { 
    AppModule.class, 
    NetModule.class, 
    ThirdModule.class // module without constructor 
}) 
public interface NetComponent{ 
    // ... 
} 
+0

Ich benutze die neueste Version von Dolch, es sagt '.appModule (neues AppModule (this)) .netModule (neues NetModule (" "))' ist veraltet –

+0

@Williams Diese Warnung wird generiert, wenn Dagger2 Ihr Modul bauen kann selbst. Wenn Ihre Klasse mit '@ Module' versehen ist, wenn alle Abhängigkeiten erfüllt sind (für sich selbst, andere Module derselben Komponente oder andere Komponenten, die als Abhängigkeiten in der übergeordneten Komponente aufgelistet sind) und der Standard oder öffentliche no-arg Konstruktor hat, kann Dagger das Modul ohne manuelle Bereitstellung instanziieren (Aufruf von '.someModule (new SomeModule()' ist redundant) –

+0

In meinem Fall habe ich einen Argumentkonstruktor in beiden Modulen, warum es immer noch eine Warnung gibt –

0

Angenommen, Ihr drittes Modul ist Testmodule:

Sie einfach dies tun können:

mNetComponent = DaggerNetComponent.builder()   
       .appModule(new AppModule(this)) 
       .netModule(new NetModule("https://api.github.com")) 
       .testModule(new TestModule()) 
       .build(); 

Hinweis: hier .testModule geben Ihnen Warnung, die, dass Sie bedeutet veraltet müssen nicht einmal Module definieren, die keine Konstruktoren haben. Sie werden implizit zum Graphen hinzugefügt.

+0

Okay, können Sie mir helfen Sie mir, wie' verständlich zu machen, dagger2' Abhängigkeitsgraph erstellen? –

+0

Sie müssen das googeln. Es gibt viele Tutorials dort draußen. –

Verwandte Themen