首先,我将简要说明我的项目的设置。我的项目中有4个作用域:
@Singleton
@ActivityScope
@ScreenScope
-对于控制器/片段@ChildScreenScope
-Screenscope内的嵌套控制器我的活动,屏幕和子屏幕是子组件。
假设我有一个ErrorHandler
类,可以在片段或子片段中使用。注入/提供这种依赖性的最佳方法是什么?
当前,我从Screen组件提供,但是我希望子屏幕具有自己的实例。如果我同时提供屏幕和子屏幕组件,则将无法正常工作,因为子组件是从其父组件继承而来的,因此在进行多次绑定时会出错。
答案 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
...
}