DaggerTestApplicationComponent没有生成缺少的绑定...对此不确定

时间:2019-07-30 14:26:23

标签: java android dagger-2

使用Dagger应用程序构建的Android Github repo api调用应用程序,但我试图通过运行assembleAndroidTest来生成DaggerTestApplicationComponent,并使用以下stacktrace破坏了我

enter image description here

im tryinng将大多数主要类都镜像为测试类,但是它使我无法阅读stacktrace,尤其是当它在某个地方构建时,我接受我出错了

请帮助,欢迎提出建议。

ApplicationComponent -------------------------------

Sub tryme()
    Dim i As Integer
    For i = Range("Start").Row To Range("Start").Row + 6
        Cells(i, 1).Value = 100
    Next
End Sub

ApplicationModule ------------------------------

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


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

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

@Module
public class ApplicationModule {

    private final Application application;

    ApplicationModule(Application application) {

        this.application = application;
    }

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

ServiceModule -------------------------------------

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

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



}

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

@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();

    }
}

我创建了一些与之类似的测试类(这是我认为的问题所在...。)

TestApplicationComponent -------------------------

@Module
public abstract class RepoServiceModule {


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

}

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

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

}

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

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


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

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

GitHub Repo

谢谢

1 个答案:

答案 0 :(得分:1)

错误基本上表明您正在尝试注入

ScreenNavigator 进入 BaseActivity ,但Dagger不知道如何获取实例,因为缺少提供方法或您错过了 @Inject ScreenNavigator

的构造函数的注释