java - DaggerTestApplicationComponent 未生成缺少绑定(bind)...对此不确定

标签 java android dagger-2

Android Github repo api 使用 Dagger 应用程序构建调用应用程序,但我试图通过运行 assembleAndroidTest 生成 DaggerTestApplicationComponent ,它会因以下堆栈跟踪而中断

enter image description here

我试图将大多数主类镜像为测试类,但它让我阅读堆栈跟踪感到困惑,特别是当它构建在我承认我出错的地方时

请帮忙,欢迎提出建议。

应用程序组件--------------------------------------------

@Singleton
@Component(modules = {
        ApplicationModule.class,
        ActivityBindingModule.class,
        ServiceModule.class,
        RepoServiceModule.class,


})
public interface ApplicationComponent {
    void inject(MyApplication myApplication);
}

应用程序模块 ------------------------------------------

@Module
public class ApplicationModule {

    private final Application application;

    ApplicationModule(Application application) {

        this.application = application;
    }

    @Provides
    Context provideApplicationContext() {
        return application;
    }
}

ActivityBindingModule-----------------------------------------

@Module(subcomponents = {
        MainActivityComponent.class
})
public abstract class ActivityBindingModule {

    @Binds
    @IntoMap
    @ActivityKey(MainActivity.class)
    abstract AndroidInjector.Factory<? extends Activity> provideMainActivityInjector (MainActivityComponent.Builder  builder);



}

服务模块------------------------------------------------

@Module(includes = NetworkModule.class)
public abstract class ServiceModule {

    @Provides
    @Singleton
    static Moshi provideMoshi() {
        return new Moshi.Builder()
                .add(AdapterFactory.create())
                .add(new ZoneDateTimeAdapter())
                .build();
    }

    @Provides
    @Singleton
    static Retrofit provideRetrofit(Moshi moshi, Call.Factory callFactory, @Named("base_url") String baseUrl) {
        return new Retrofit.Builder()
                .callFactory(callFactory)
                .addConverterFactory(MoshiConverterFactory.create(moshi))
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .baseUrl(baseUrl)
                .build();

    }
}

RepoServiceModule -----------------------------

@Module
public abstract class RepoServiceModule {


   @Provides
   @Singleton
   static RepoService provideRepoService(Retrofit retrofit) {
       return retrofit.create(RepoService.class);
   }

}

我创建了一些测试类来反射(reflect)这些(我认为这是我的问题所在......)。

测试应用程序组件 -------------------------

@Singleton
@Component(modules = {
        ApplicationModule.class,
        TestActivityBindingModule.class,
        TestRepoServiceModule.class,
        ServiceModule.class,
})
public interface TestApplicationComponent extends ApplicationComponent {

}

TestActivityBindingModule------------------------------------

@Module(subcomponents = {
        TestMainActivityComponent.class,
})
public abstract class TestActivityBindingModule {


    @Binds
    @IntoMap
    @ActivityKey(MainActivity.class)
    abstract AndroidInjector.Factory<? extends Activity> bindMainActivityInjector(TestMainActivityComponent.Builder builder);
}

TestRepoServiceModule------------------------------------

@Module
public abstract class TestRepoServiceModule {

    @Binds
    abstract RepoService bindRepoService(TestRepoService repoService);
}

可以提供所需的任何其他类。

GitHub Repo

谢谢

最佳答案

该错误基本上表明您正在尝试注入(inject)

ScreenNavigator 进入 BaseActivity,但由于缺少提供方法,Dagger 不知道如何获取实例,或者您错过了 @Inject ScreenNavigator的构造函数的注释

关于java - DaggerTestApplicationComponent 未生成缺少绑定(bind)...对此不确定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57274005/

相关文章:

android - 导航组件,检查返回堆栈中是否存在 fragment

android - Gradle 以编程方式排除多个任务

android - 使用 Hilt 注入(inject)类以查看组件

android - 创建要在 src/test 和 src/androidTest 之间共享的 Dagger 2 组件

java - 属性文件键中不含 "\"的空格字符

java - 从 LIBGDX 获取不必要的触摸事件

java - 如何使用 Appium 通过 selenium 查找警报对话框?

JavaFX- 在 TableView 中居中选定的行

android - 在 Droid X 上裁剪图片将生成的图像设置为墙纸

java - 使用 Dagger 2 时,我应该将库初始化移动到哪里?