Dolch2: Fehler, wenn zwei Komponenten die gleiche Signatur für die Injektionsmethode haben

9

Ich habe diese Komponente:

%Vor%

und das Modul:

%Vor%

und diese andere Komponente:

%Vor%

und ich bekomme diesen Fehler:

  

Fehler: (15, 10) Fehler: Oauth2Service kann nicht ohne ein bereitgestellt werden   @ Provides- oder @ Producens-annotated-Methode.

Wenn ich den inject-Methode-Parameter LoggedUserComponent auf ein anderes Activity ändere, dann sage AnotherActivity wie folgt:

%Vor%

Kompilation ist in Ordnung. Warum? Kann ich nicht zwei Komponenten mit der gleichen Injektionssignatur haben?

Ich versuche zu verstehen, wie Dagger funktioniert, also wird jede Hilfe geschätzt. Danke.

    
Héctor 03.03.2016, 18:13
quelle

2 Antworten

7

Stellen Sie sich dagger als Objektgraph vor - was es eigentlich ist. Sie sollten wahrscheinlich nicht zwei verschiedene Komponenten haben, die dasselbe Objekt einspeisen können, außer zu Testzwecken (oder wenn Sie ein anderes Verhalten einbeziehen möchten, nicht ein anderes).

Wenn Ihr LoginActivity von mehreren Modulen abhängt, sollten Sie sie in einer einzigen Komponente zusammenfassen, da der Dolch, wie Ihr Fehler zeigt, fehlschlägt, wenn er nicht alle Abhängigkeiten von einer einzelnen Komponente bereitstellen kann.

%Vor%

Wenn Sie Oauth2Service betrachten, könnte dies leicht etwas sein, das mehrere Objekte verwenden könnten, sodass ein höherer Bereich angemessen sein könnte. In diesem Fall sollten Sie darüber nachdenken, es mit einem @Singleton -Bereich zu Ihrer Anwendungskomponente hinzuzufügen oder vielleicht eine eigene Komponente mit z. a @UserScope .

Dann müssten Sie entweder Ihre LoggedUserComponent a @Subcomponent erstellen oder diese Komponente als eine Abhängigkeit deklarieren, indem Sie @Component(dependencies = OauthComponent.class) verwenden und dafür einen Getter in OauthComponent bereitstellen. In beiden Fällen wäre der Dolch auch in der Lage, die gefundene Abhängigkeit höher im Graphen darzustellen und somit auch Ihren Fehler zu beheben.

    
David Medenjak 03.03.2016, 20:12
quelle
0

Es wird verrückt, weil Sie sagen, dass Sie in diese Klasse injizieren können, aber Sie stellen keine Klasse zur Verfügung, die Sie erwarten, dass Sie sie bereitstellen. Sie müssen nur das OauthModule zu Ihrer LoggedUserComponent hinzufügen. Probieren Sie dies

aus %Vor%     
ootinii 03.03.2016 18:42
quelle

Tags und Links