[英]Dagger 2 and component dependency in Android
Activity活动
@PerActivity
@Component(modules = [ActivityModule::class])
interface ActivityComponent
Application应用
@Singleton
@Component(modules = [
HttpModule::class,
ApplicationModule::class
])
interface AppComponent
Activity Specific特定活动
@Component(
modules = [LandingModule::class],
dependencies = [AppComponent::class, ActivityComponent::class]
)
@ActivityContext
interface LandingComponent {
fun inject(activity: MainActivity)
}
Apply申请
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
DaggerLandingComponent.builder().build().inject(this)
}
The error I'm getting is that AppComponent has a singleton scope cannot depend on scoped components:
我得到的错误是 AppComponent 有一个单例范围cannot depend on scoped components:
What's the proper solution in this case?在这种情况下,正确的解决方案是什么?
One common way to address this is to add a plus
method to your parent component.解决此问题的一种常见方法是向您的父组件添加一个plus
方法。 So ActivityComponent
is technically AppComponent
+ ActivityComponent
and LandingComponent
is AppComponent
+ ActivityComponent
+ LandingComponent
.所以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)
}
Apply申请
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
AppComponent.builder().build().plus(ActivityModule()).plus(LandingModule())
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.