2016-04-04 10 views
27

Angesichts der folgenden KlassenErste von Dagger 2 Warnung befreien „Generieren eines MembersInjector“

abstract class AbstractClass { 
    @Inject SomeDependency someDependency; 
} 

class SomeClass extends AbstractClass { 
    @Inject AnotherDependency anotherDepenency; 

    public void onCreate() { 
     component = // Get component instance somehow 
     component.inject(this); 
    } 
} 

in Dagger 2, wenn Abhängigkeiten in einer Klasse, die von einer abstrakten Basisklasse erweitert, die auch enthält Abhängigkeiten Injektion, Dolch zeigt eine Warnung der Art Generating a MembersInjector for AbstractClass. Prefer to run the dagger processor over that class instead. während der Kompilierung.

Wenn ich jedoch onCreate() in AbstractClass überschreiben/implementieren und die Abhängigkeitsinjektion dort aufrufen, wird die Abhängigkeit someDependency zweimal injiziert, was zu unerwartetem Verhalten führen kann. Einmal in onCreate() von AbstractClass und einmal in onCreate() von SomeClass.

Was ist die beste Lösung werde diese Warnung zu befreien, während doppelte Injektion von Abhängigkeiten zu verhindern?

Antwort

2

Ab Dagger 2.9 diese Warnungen sind standardmäßig deaktiviert.

1

Lösung könnte sein: definieren onCreate() in der abstrakten Klasse nur

+1

Leider ist dies nicht möglich ist, da in der Unterklasse erklärten Abhängigkeiten können nicht von der abstrakten Klasse in 'onCreate()' injiziert werden. –

+0

Ist es in der Dokumentation? Oder hast du Dolchquellen überprüft? Ich sehe nicht, warum es unmöglich sein soll. Meine eigene kleine DI-Bibliothek tut dies ohne Probleme (falls Sie Vies und Eigenschaften injiziert haben, sind Sie willkommen: https://github.com/ko5tik/andject/blob/master/src/main/java/de/pribluda/android /andject/BaseInjector.java) –

+0

Dagger 2 erzeugt den Code für Abhängigkeitseinspritzung während der Kompilierung. So Abhängigkeiten in eine Unterklasse von einer übergeordneten Klasse Injektion würde Dagger erfordert eine Instanz Prüfung durchzuführen, da mehrere Klassen mit unterschiedlichen Abhängigkeiten von der Superklasse erweitern könnten. Ich bezweifle, dass Dagger dazu in der Lage ist und dass die Architekten diese Prüfungen durchführen wollen. –