简体   繁体   English

Android 中的 Dagger 2 和组件依赖

[英]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 + 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)
}

Apply申请

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    AppComponent.builder().build().plus(ActivityModule()).plus(LandingModule())
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM