2015-09-23 9 views
17

私はアプリケーションのContextAuthManagerApiClientの2つのオブジェクトに注入しようとしています。ダガー2 - なぜこれは依存サイクルですか?

どちらも上記のコンテキストに依存し、ApiClientAuthManagerに依存します。 Contextに他のものへの参照がない場合、なぜこれが依存サイクルですか?これは解決できますか?

EDIT:ここはいくつかのコード

@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(); 
} 

答えて

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

AuthManagerに依存AuthManagerを提供してあなたのprovidesAuthManager方法です。

あなたのサイクルがあります:)

+0

質問に表示されるエラーメッセージを追加するのに役立ちます。この場合、間違った方法でエラーメッセージを解釈して、私たちが手助けするのをより困難にしています。 – nhaarman

+0

です。 'AuthManager'をローカルパラメータとして置くことで、ダガーが自動的に注入するので、コーヒーメーカーの例を誤解しているようです。正しい方法はローカルパラメータとして 'Context'を設定することです。お返事ありがとう:) –

+0

この回答は、私が提供する方法を二重チェックするように促し、シンプルな入力ミスに起因する何かを追跡する時間を節約しました。ありがとう! – user3265561

0

providesAuthManager方法を削除し、あなたの認証マネージャーコンストラクタで@Injectを追加します。

+0

これは他のエラーにつながります: "@Provide annotated-methodなしでは...を提供できません" – nhoxbypass

関連する問題