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:
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.
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.
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.
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%