Dagger 2 和 Android 中的组件依赖关系



Activity

@PerActivity
@Component(modules = [ActivityModule::class])
interface ActivityComponent

应用

@Singleton
@Component(modules = [
HttpModule::class,
ApplicationModule::class
])
interface AppComponent

特定活动

@Component(
modules = [LandingModule::class],
dependencies = [AppComponent::class, ActivityComponent::class]
)
@ActivityContext
interface LandingComponent {
fun inject(activity: MainActivity)
}

应用

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
DaggerLandingComponent.builder().build().inject(this)
}

我得到的错误是AppComponent具有单例范围cannot depend on scoped components:

在这种情况下,正确的解决方案是什么?

解决此问题的一种常见方法是将plus方法添加到父组件。所以ActivityComponent在技术上是AppComponent+ActivityComponentLandingComponentAppComponent+ActivityComponent+LandingComponent.

@Singleton
@Component(modules = [
HttpModule::class,
ApplicationModule::class
])
interface AppComponent {
ActivityComponent plus(module: ActivityModule)
}
@PerActivity
@Subcomponent(modules = [ActivityModule::class])
interface ActivityComponent {
LandingComponent plus(module: LandingModule)
}
@ActivityContext
@Subcomponent(modules = [LandingModule::class])
interface LandingComponent {
fun inject(activity: MainActivity)
}

应用

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
AppComponent.builder().build().plus(ActivityModule()).plus(LandingModule())
}

最新更新