2017-01-07 4 views
1

Ich spielte um Dolch 2 in meinem Projekt und dann steckte ich bei dieser Fehlerkompilation fest. ->Error:(18, 21) error: ....MyManager cannot be provided without an @Provides-annotated method. ...MyManager is injected at ...SignInPresenter.<init>(myManager) ...SignInPresenter is provided at ...SignInComponent.signInPresenter()Dolch 2 Problem: kann nicht ohne eine @Provides Methode

Ich habe versucht, über das Thema zu erforschen, aber ich konnte nicht genau den Fehler in meinem Code hinweisen. Ich glaube, irgendwo habe ich einen kleinen Fehler gemacht oder in Dagger2 habe ich etwas falsch verstanden. Wenn jemand den Fehler aufzeigen kann. Ich werde es wirklich zu schätzen wissen.

Mein Manager

public interface MyManager { 
    Observable<User> getAllUsers(); 
} 

SignIn Presenter

@Inject 
    public SignInPresenter(MyManager myManager) { 
     this.myManager= myManager; 
    } 

ich so etwas tun, in MySignInFragment

@Override protected void injectDependencies() { 
     signInComponent = DaggerSignInComponent.builder() 
       .myApplicationComponent(MyDaggerApplication.getMyComponents()) 
       .build(); 
    } 

SignIn Komponente

@Component(modules = {MyModule.class}, 
     dependencies = {MyApplicationComponent.class}) 
public interface SignInComponent { 
    SignInPresenter signInPresenter(); 
} 

Dies ist meine Anwendung

public class MyDaggerApplication extends Application { 
    private static MyApplicationComponent myApplicationComponent; 


    @Override 
    public void onCreate() { 
     super.onCreate(); 
     myApplicationComponent = DaggerMyApplicationComponent.create(); 
     myApplicationComponent = DaggerMyApplicationComponent.builder().myModule(new MyModule(this)).build(); 
     myApplicationComponent.inject(this); 
    } 

    public MyApplicationComponent getMyAppComponents(){ 
     return myApplicationComponent; 
    } 

    public static MyApplicationComponent getMyComponents(){ 
     return myApplicationComponent; 
    } 
} 

Meine Module und Komponenten-Klassen

@Component(modules = {MyModule.class}) 
public interface MyApplicationComponent { 
    void inject(MyDaggerApplication myDaggerApplication); 
} 

@Module 
public class MyModule { 
    private final MyDaggerApplication myDaggerApplication; 

    public MyModule(MyDaggerApplication myDaggerApplication){ 
     this.myDaggerApplication = myDaggerApplication; 
    } 

    @Provides 
    @Singleton 
    Context providesApplicationContext() { 
     return this.myDaggerApplication; 
    } 

    @Provides 
    @Singleton 
    SharedPreferences providesSharedPreferences(Context context) { 
     return context.getSharedPreferences("My_Pref", Context.MODE_PRIVATE); 
    } 

    @Provides 
    @Singleton 
    public MyDefaultManager providesMyDefaultManager(MyDefaultManager myDefaultManager,Context context){ 
     return myDefaultManager.getInstance(context); 
    } 
} 

Ich vermute, dass ich etwas falsch in das tue DaggerApplication. Alle Vorschläge Ratschläge werden sehr geschätzt. :)

Antwort

1

Unter der Annahme, dass MyDefaultManager Geräte MyManager, den letzten Anbieter in MyModule ändern:

@Provides 
@Singleton 
public MyManager providesMyDefaultManager(MyDefaultManager myDefaultManager,Context context){ 
    return myDefaultManager.getInstance(context); 
} 

Wie Sie eine Instanz von ? implements MyManager anstatt MyDefaulManager speziell zurückkehren möge.

Verwandte Themen