4
dagger.androidパッケージで新しくリリースされたDagger 2.10で小さなAndroidプロジェクトを試しました。 のみMainApplication
クラスはダガーで注入されるべきで、他には何もまだ依存関係を持っていません:Dagger 2 Androidアプリケーションコンポーネントがありませんinjectメソッド
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
このコードは質問に答えるかもしれませんが、追加の[context](https://meta.stackexchange.com/q/114762)_how_問題を解決すれば答えの長期的価値が向上するだろう。また、この答えが他のものよりも適切である理由についても言及していません。 –