我正在使用带有dagger-android-support
的Dagger v2.12以及以下配置:
@Singleton
@Component(
modules = arrayOf(
AndroidSupportInjectionModule::class,
AndroidBindingModule::class,
AppModule::class
)
)
interface AppComponent : AndroidInjector<App> {
@Component.Builder
abstract class Builder : AndroidInjector.Builder<App>()
}
@Module
abstract class AndroidBindingModule {
@PerActivity
@ContributesAndroidInjector(modules = arrayOf(MainModule::class))
internal abstract fun contributeMainActivityInjector(): MainActivity
}
@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
2中引用的第二个实例。
为什么会这样?这是我的Dagger配置中的错误,预期行为或某些问题吗?
编辑: 问题存储库,问题为https://github.com/ismaeldivita/dagger-test-so
答案 0 :(得分:3)
问题是,您在活动课程中执行了MATCH (n:Person)-[r]->(m) WHERE n.name = "John"
次2次。这种情况会发生,因为您的活动是AndroidInjection.inject(this)
的后代,后者又会执行DaggerAppCompatActivity
。
来自AndroidInjection.inject(this)
的{{3}}:
DaggerAppCompatActivity
AppCompatActivity
注入onCreate(Bundle)
中的成员,可用于注入附加到其中的Fragments
。
从AndroidInjection.inject(this)
类中省略MainActivity
行后,您将获得logcat中的预期输出: