Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Dagger 2 - Why is this a dependency cycle?

I'm trying to inject the application's Context into 2 other objects, an AuthManager and an ApiClient.

Both of them depends on said context, and the ApiClient depends on the AuthManager. Why is this a dependency cycle, if Context doesn't have a reference to the others 2? can this be solved?

EDIT: here is some 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(); } 
like image 325
Christopher Francisco Avatar asked Sep 23 '15 16:09

Christopher Francisco


2 Answers

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

Your providesAuthManager method which provides an AuthManager depends on an AuthManager.

There's your cycle :)

like image 190
nhaarman Avatar answered Oct 09 '22 02:10

nhaarman


Remove the providesAuthManager method and add @Inject in your AuthManager Constructor.

like image 35
Yz_me Avatar answered Oct 09 '22 02:10

Yz_me