Dagger2 – дубликат экземпляра в DoubleCheck

Я использую Dagger v2.12 с поддержкой dagger-android-support со следующей конфигурацией:

AppComponent

 @Singleton @Component( modules = arrayOf( AndroidSupportInjectionModule::class, AndroidBindingModule::class, AppModule::class ) ) interface AppComponent : AndroidInjector<App> { @Component.Builder abstract class Builder : AndroidInjector.Builder<App>() } 

AndroidBindingModule

 @Module abstract class AndroidBindingModule { @PerActivity @ContributesAndroidInjector(modules = arrayOf(MainModule::class)) internal abstract fun contributeMainActivityInjector(): MainActivity } 

MainModule

 @Module class MainModule { ... @Provides @PerActivity fun providePresenter(rxLifecycle: ReactiveLifecycle, view: MainView) = MainPresenter(rxLifecycle, view) } 

Основная деятельность

 class MainActivity : BaseActivity() { @Inject lateinit var presenter: MainPresenter ... } 

Анализируя дамп памяти, я заметил, что класс MainPresenter был создан дважды, один из них упоминается в MainActivity и dagger.internal.DoubleCheck (как и ожидалось) 1 , но есть второй экземпляр, dagger.internal.DoubleCheck только в dagger.internal.DoubleCheck 2 .

sample1

sample2

Почему это происходит? Является ли это ошибкой, ожидаемым поведением или некоторой проблемой в моей конфигурации Dagger?

Изменить: Пример репозитория с проблемой https://github.com/ismaeldivita/dagger-test-so

Проблема в том, что вы выполняете AndroidInjection.inject(this) 2 раза в своем классе активности. Это происходит, потому что ваша деятельность является потомком DaggerAppCompatActivity , который, в свою очередь, также выполняет AndroidInjection.inject(this) .

Из документов DaggerAppCompatActivity :

AppCompatActivity который вводит свои члены в onCreate(Bundle) и может быть использован для вставки Fragments прикрепленных к нему.

После исключения AndroidInjection.inject(this) из класса MainActivity вы получите ожидаемый результат в logcat:

введите описание изображения здесь