Кинжал 2: ошибка: циклическая зависимость [ComponentProcessor: MiscError] с сгенерированным кодом - PullRequest
2 голосов
/ 28 января 2020

Я работаю над проектом, в котором старый кинжал реализован на базе кода. Сегодня я пытаюсь оптимизировать реализацию кинжала до версии 2.2. Поскольку вы знаете, что Google обновил библиотеку кинжалов, чтобы упростить ее реализацию в android, существуют некоторые вспомогательные классы, такие как классы Dagger Activity, Dagger Application и Dagger Fragment.

Я обновил библиотеку, но я застрял на ошибке, сказав, что

 error: [ComponentProcessor:MiscError]
 dagger.internal.codegen.ComponentProcessor was unable to process this
 interface because not all of its dependencies could be resolved. Check
 for compilation errors or a circular dependency with generated code.
 public abstract interface NewAppComponent extends
 dagger.android.AndroidInjector<com.mallconnect.tdm.TDMApplication> {

NewAppComponent

@Singleton
@Component(modules = [AndroidSupportInjectionModule::class,
            ActivityBuilderModule::class,
            AppModule::class,
            RoomModule::class,
            RetrofitModule::class,
            MappedInModule::class,
            ViewModelFactoryModule::class
])
interface NewAppComponent : AndroidInjector<TDMApplication> {

    /**
     * Session manager can be access any where in the application
     */
    fun sessionManager(): SessionManager

    @Component.Builder
    interface Builder {

        /**
         * [BindsInstance] annotation is used for, if you want to bind particular object or instance
         * of an object through the time of component construction
         *
         * @param application The application instance
         *
         * @return The Builder
         */
        @BindsInstance
        fun application(application: Application): Builder


        /**
         *
         * @return the AppComponent
         */
        fun build(): NewAppComponent

    }

}

ActivityBuilderModule

@Module
public abstract class ActivityBuilderModule {

    @ContributesAndroidInjector(modules = {MainFragmentBuildersModule.class,
            MainViewModelsModule.class})
    abstract Main contributeMainActivity();

    @ContributesAndroidInjector(modules = {AuthViewModel.class})
    abstract BaseActivity contributeBaseActivity();



}

У меня есть проверил некоторые сообщения StackOverflow, но я не нашел решения

Ошибка круговой зависимости Dagger2

Dagger 2.15: Appcomponent - не удалось обработать этот интерфейс

Как мы можем отследить источник ошибки?

1 Ответ

0 голосов
/ 29 января 2020

Я решил проблему циклической зависимости, как предложено в комментарии

Проблема не может быть решена без прохождения всех модулей, которые были включены в component!

Когда я go через ActivityBuilderModule по ошибке, я предоставляю AuthViewModel вместо AuthViewModelModule и внутри MainFragmentBuilderModule Я также доказываю ViewModel вместо ViewModelModule в ContributeAndroidInjector

...