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
的自動生成的類...我必須自己使用它嗎?
差不多,但是謝謝 - 你讓我走上正軌。這工作:void inject(MainApplication應用程序);而不是您發佈的參數。 – Paco1
是的,你必須使用一個類,注入方法將無法使用接口 – ootinii
雖然這段代碼可能會回答這個問題,提供額外的[上下文](https://meta.stackexchange.com/q/114762)有關_how_和/或_爲什麼它解決了這個問題會提高答案的長期價值。它也不會提到爲什麼這個答案比其他答案更合適。 –