Dagger2を使用して新しいプロジェクトをセットアップしようとしています。以前はDagger2を使用していましたが、現在は自分でゼロからセットアップしようとしています。私が参加しているKotlinプロジェクトから例を取得していますが、現在Kotlinで機能するのと同じ方法でJavaに設定することはできません(または多分私はm何かが足りない)。
これは、単一のコンポーネント、単一のモジュール、およびアプリケーションです。
コンポーネント
@Singleton
@Component(modules = {MainAppModule.class})
public interface AppComponent extends AndroidInjector<App> {
@Component.Builder
abstract class Builder implements AndroidInjector.Factory<App> {
public AppComponent create(App application) {
seedApplication(application);
return build();
}
@BindsInstance
abstract void seedApplication(App application);
abstract AppComponent build();
}
}
モジュール
@Module
abstract class MainAppModule {
@Binds
abstract public Application bindApplication(App application);
@ContributesAndroidInjector
abstract public MainActivity contributeActivityInjector();
}
*アプリケーション*
public class App extends DaggerApplication {
@Override
public AndroidInjector<? extends DaggerApplication> applicationInjector() {
return DaggerAppComponent.builder().create(this);
}
}
この時点で、@Inject
で呼び出すクラスはありません。ビルド時にエラーが発生します:
error: [dagger.Android.AndroidInjector.inject(T)] Java.util.Map<Java.lang.Class<? extends Android.content.BroadcastReceiver>,javax.inject.Provider<dagger.Android.AndroidInjector.Factory<? extends Android.content.BroadcastReceiver>>> cannot be provided without an @Provides-annotated method.
public interface AppComponent extends AndroidInjector<App> {
^
もちろんcannot be provided without an @Provides-annotated method.
が問題のようですが、どうすれば解決できるのかわかりません。他の誰かが設定した私のkotlinプロジェクトでは問題なく動作します。
AppComponent
にインストールされている AndroidInjectionModule (または AndroidSupportInjectionModule サポートフラグメントを使用している場合)がないようです。
次のようになります。
@Component(modules = {AndroidInjectionModule.class, MainAppModule.class})