2015-09-23 6 views
17

Ich versuche, die Anwendung Context in 2 andere Objekte, eine AuthManager und eine ApiClient zu injizieren.Dolch 2 - Warum ist das ein Abhängigkeitszyklus?

Beide hängen von diesem Zusammenhang ab, und die ApiClient hängt von der AuthManager ab. Warum ist das ein Abhängigkeitszyklus, wenn Context keinen Bezug zu den anderen 2 hat? Kann das gelöst werden?

EDIT: hier ist ein Code

@Module 
public class AppModule { 

    private final Application application; 

    public AppModule(Application application) { 
     this.application = application; 
    } 

    @Provides @Singleton 
    Context provideApplicationContext() { 
     return this.application; 
    } 
} 


@Module 
public class NetworkModule { 

    @Provides @Singleton 
    public AuthManager providesAuthManager(AuthManager manager) { 
     return manager; 
    } 

    @Provides @Singleton 
    public ApiClient providesApiClient(ApiClientFactory factory) { 
     return factory.create(); 
    } 
} 

@Singleton 
@Component(modules = {AppModule.class, NetworkModule.class}) 
public interface ApplicationComponent { 
    void inject(BaseActivity activity); 

    // Exported for child-components 
    Context context(); 
    ApiClient apiClient(); 
    AuthManager authManager(); 
} 

Antwort

42
@Provides @Singleton 
public AuthManager providesAuthManager(AuthManager manager) { 
    return manager; 
} 

Ihre providesAuthManager Methode, die ein AuthManager hängt von einem AuthManager bietet.

Es ist dein Zyklus :)

+0

Es hilft, Fehlermeldungen zu der Frage hinzuzufügen. In diesem Fall haben Sie die Fehlermeldung falsch interpretiert, was es für uns schwieriger macht zu helfen :) – nhaarman

+0

Ich sehe. Es scheint, dass ich das Beispiel der Kaffeemaschine falsch verstanden habe, als ich den "AuthManager" als lokalen Parameter aufstellte, würde der Dolch automatisch injizieren. Scheint als wäre der richtige Weg, den 'Kontext' als lokalen Parameter zu setzen. Danke :) –

+0

Diese Antwort veranlasste mich, eine Methode zu überprüfen und speicherte mir Stunden Aufwand, etwas durch einen einfachen Tippfehler aufzuspüren. Vielen Dank! – user3265561

0

die providesAuthManager Methode entfernen und @Inject in Ihrem AuthManager Constructor hinzuzufügen.

+0

Dies führte zu einem anderen Fehler: "... kann nicht ohne @Provide kommentierte Methode bereitgestellt werden" – nhoxbypass