2017-03-21 54 views
4

我試着用Dagger.android包新發布的Dagger 2.10一個小的Android項目。 只有MainApplication類應該由匕首被注入,沒有別的任何依賴尚未:匕首2 Android應用程序組件丟失注入方法

的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 {} 

自動生成的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); 
    } 
    } 
} 

我是新來的匕首,並有大量的資源,但許多人描述爲一個具有過時的匕首庫DI。我的實施出了什麼問題? 我還發現一個名爲MainApplication_MembersInjector的自動生成的類...我必須自己使用它嗎?

回答

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

} 
+3

差不多,但是謝謝 - 你讓我走上正軌。這工作:void inject(MainApplication應用程序);而不是您發佈的參數。 – Paco1

+0

是的,你必須使用一個類,注入方法將無法使用接口 – ootinii

+0

雖然這段代碼可能會回答這個問題,提供額外的[上下文](https://meta.stackexchange.com/q/114762)有關_how_和/或_爲什麼它解決了這個問題會提高答案的長期價值。它也不會提到爲什麼這個答案比其他答案更合適。 –