Ich versuchte ein kleines Android-Projekt mit der neu veröffentlichten Dolch 2.10 mit dem Paket dagger.android. Nur die MainApplication
Klasse sollte von Dagger injiziert werden, hat nichts anderes alle Abhängigkeiten noch:Dolch 2 Android-Anwendung Komponente fehlt injizieren Methode
build.gradle
dependencies {
...
// Dagger
compile 'com.google.dagger:dagger:2.10'
compile 'com.google.dagger:dagger-android:2.10'
annotationProcessor 'com.google.dagger:dagger-compiler:2.10'
// Fix for incompatible library versions when adding dagger-android and having espresso-core:2.2.2 in tests
androidTestCompile 'com.google.code.findbugs:jsr305:3.0.1'
}
MainApplication.java
public class MainApplication extends Application implements HasDispatchingActivityInjector {
@Inject DispatchingAndroidInjector<Activity> dispatchingAndroidInjector;
@Override
public void onCreate() {
super.onCreate();
DaggerMainApplicationComponent.create();
// DaggerMainApplicationComponent.create().inject(this); does not work - no inject(...) method!
}
@Override
public DispatchingAndroidInjector<Activity> activityInjector() {
return dispatchingAndroidInjector;
}
}
MainApplicationComponent.java
@Component(modules = AndroidInjectionModule.class)
public interface MainApplicationComponent {}
Automatisch generierte DaggerMainApplica tionComponent.java:
public final class DaggerMainApplicationComponent implements MainApplicationComponent {
private DaggerMainApplicationComponent(Builder builder) {
assert builder != null;
}
public static Builder builder() {
return new Builder();
}
public static MainApplicationComponent create() {
return new Builder().build();
}
public static final class Builder {
private Builder() {}
public MainApplicationComponent build() {
return new DaggerMainApplicationComponent(this);
}
}
}
Ich bin neu in Dolch und es gibt viele Ressourcen, aber viele beschreiben DI mit einer veralteten Bibliothek Dagger. Was ist falsch in meiner Implementierung? Ich fand auch eine automatisch generierte Klasse namens MainApplication_MembersInjector
... muss ich das selbst verwenden?
Fast, aber danke - Sie bringen mich auf den richtigen Weg. Das hat funktioniert: void inject (MainApplication application); anstelle der von Ihnen geposteten Parameter. – Paco1
yeah, Sie müssen eine Klasse verwenden, injizieren Methoden funktionieren nicht mit einer Schnittstelle – ootinii
Während dieser Code die Frage beantworten kann, bietet zusätzliche [Kontext] (https://meta.stackexchange.com/q/114762) in Bezug auf _how_ und/oder _why_ es löst das Problem würde den langfristigen Wert der Antwort verbessern. Es tut auch nicht weh zu erwähnen, warum diese Antwort passender ist als andere. –