2015-09-23 19 views
17

Sto tentando di iniettare l'applicazione Context in altri 2 oggetti, uno AuthManager e uno ApiClient.Daga 2 - Perché si tratta di un ciclo di dipendenza?

Entrambe dipendono da detto contesto e lo ApiClient dipende dallo AuthManager. Perché è un ciclo di dipendenze, se Context non ha un riferimento agli altri 2? può essere risolto?

EDIT: Ecco il codice

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

risposta

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

Il tuo metodo providesAuthManager che fornisce un AuthManager dipende da un AuthManager.

C'è il ciclo :)

+0

È utile aggiungere eventuali messaggi di errore alla domanda. In questo caso, hai interpretato il messaggio di errore nel modo sbagliato, rendendo più difficile per noi aiutare :) – nhaarman

+0

Vedo. Sembra che abbia frainteso l'esempio della caffettiera, dato che aggiungo 'AuthManager' come parametro locale, il pugnale si auto-inietterebbe ad esso. Sembra che il modo giusto sia impostare il 'Context' come parametro locale. Grazie :) –

+0

Questa risposta mi ha spinto a ricontrollare un metodo fornisce e mi ha risparmiato ore di sforzi rintracciare qualcosa causato da un semplice errore di battitura. Grazie! – user3265561

0

Rimuovere il metodo providesAuthManager e aggiungere @Inject nel vostro AuthManager Constructor.

+0

Questo porta a un altro errore: "... non può essere fornito senza @Provide metodo annotato" – nhoxbypass

Problemi correlati