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
+ActivityComponent
,LandingComponent
是AppComponent
+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())
}