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. :)