带有子组件的Dagger2 Multiscope

时间:2018-11-12 20:26:37

标签: android dagger-2

首先,我将简要说明我的项目的设置。我的项目中有4个作用域:

  1. @Singleton
  2. @ActivityScope
  3. @ScreenScope-对于控制器/片段
  4. @ChildScreenScope-Screenscope内的嵌套控制器

我的活动,屏幕和子屏幕是子组件。

假设我有一个ErrorHandler类,可以在片段或子片段中使用。注入/提供这种依赖性的最佳方法是什么?

当前,我从Screen组件提供,但是我希望子屏幕具有自己的实例。如果我同时提供屏幕和子屏幕组件,则将无法正常工作,因为子组件是从其父组件继承而来的,因此在进行多次绑定时会出错。

1 个答案:

答案 0 :(得分:0)

如果仅类型不足以标识依赖项,则可以使用@Named。按照您的示例,它看起来像:

@Module
class ScreenModule {
    @ScreenScope
    @Provides
    @Named("screen")
    fun provideErrorHandler(): ErrorHandler = ErrorHandler()
}

@Module
class ChildScreenModule {
    @ChildScreenScope
    @Provides
    @Named("child")
    fun provideErrorHandler(): ErrorHandler = ErrorHandler()
}

class MyScreen : Fragment() {
    @Inject @Named("screen") lateinit var errorHandler: ErrorHandler
    ...
}

class MyChildScreen : Fragment() {
    @Inject @Named("child") lateinit var errorHandler: ErrorHandler
    ...
}