2017-03-21 6 views
4

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?

Antwort

0
@Component(modules = AndroidInjectionModule.class) 
public interface MainApplicationComponent { 
    void inject(DispatchingAndroidInjector dispatchingAndroidInjector); 

} 
+3

Fast, aber danke - Sie bringen mich auf den richtigen Weg. Das hat funktioniert: void inject (MainApplication application); anstelle der von Ihnen geposteten Parameter. – Paco1

+0

yeah, Sie müssen eine Klasse verwenden, injizieren Methoden funktionieren nicht mit einer Schnittstelle – ootinii

+0

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. –

Verwandte Themen