私は、ViewUtilsクラスでアクティビティを注入しようとしましたが、失敗しました。私はいくつかの異なる投稿に従ってきましたが、私の実装で何が欠けているのか分かりません。ダガー2.10/2.11注入アクティビティが失敗する
これはおそらく以下の記事の繰り返しです。私は本当にそれをお詫びしますが、正直なところ私は何が欠けているのか分かりません。
- Dagger 2.10 Android subcomponents and builders
- How to create custom scoped modules in dagger 2.10
- https://google.github.io/dagger/subcomponents.html
を次のように私の実装は次のとおりです:
AppComponent
これらは私が見つけた記事です0ActivityBindingModule
@Module public abstract class ActivityBindingModule {
@ContributesAndroidInjector
abstract LoginActivity loginActivity();
}
LoginSubcomponent
@Subcomponent(modules = LoginSubcomponent.LoginActivityModule.class)
public interface LoginSubcomponent extends AndroidInjector<LoginActivity> {
@Subcomponent.Builder abstract class Builder extends AndroidInjector.Builder<LoginActivity> {}
@Module abstract class LoginActivityModule {
@Binds abstract Activity bindActivity(LoginActivity activity);
@Provides @ActivityScope static ViewUtils viewUtils(Activity activity) {
return new ViewUtils(activity);
}
}
}
ViewUtils
public class ViewUtils {
private final Activity activity;
@Inject public ViewUtils(Activity activity) {
this.activity = activity;
}
}
と私は取得していますエラーがある:
Error:(14, 22) error: [dagger.android.AndroidInjector.inject(T)] android.app.Activity cannot be provided without an @Inject constructor or from an @Provides-annotated method.
android.app.Activity is injected at
com.emblyapp.app.ui.helpers.ViewUtils.<init>(activity)
com.emblyapp.app.ui.helpers.ViewUtils is injected at
com.emblyapp.app.ui.authentication.login.LoginActivity.viewUtils
com.emblyapp.app.ui.authentication.login.LoginActivity is injected at
dagger.android.AndroidInjector.inject(arg0)
ここで何が間違っていますか?助けてくれてありがとう!
編集:私はdagger android documentationで指定されているように私のLoginActivityがAndroidInjection
@Override protected void onCreate(Bundle savedInstanceState) {
AndroidInjection.inject(this);
super.onCreate(savedInstanceState);
}
はい!ありがとうございました。私は混乱の原因となったドキュメンテーションの部分をよく理解していませんでした。わかった。 ContributesAndroidInjectorを使用すると、(それによって作成された)サブコンポーネントをスキップできます。私はそれを得る!助けてくれてありがとう、それは今働いている:) – Peddro