Dagger2 Multiscope с субкомпонентами - PullRequest
0 голосов
/ 12 ноября 2018

Сначала я кратко объясню настройку моего проекта.В моем проекте 4 области действия:

  1. @Singleton
  2. @ActivityScope
  3. @ScreenScope - Для контроллеров / фрагментов
  4. @ChildScreenScope - вложенные контроллеры внутри Screenscope

Моя активность, экран и дочерний экран являются субкомпонентами.

Допустим, у меня есть класс ErrorHandler, который можно использовать во фрагменте илидочерний фрагмент.Каков наилучший способ внедрить / предоставить эту зависимость?

В настоящее время я предоставляю компонент Screen, однако я хочу, чтобы дочерние экраны имели свой собственный экземпляр.Если я предоставлю компоненты как из экрана, так и из дочернего экрана, он не будет работать, поскольку подкомпоненты наследуются от своего родителя, и я получаю сообщение об ошибке для нескольких привязок.

1 Ответ

0 голосов
/ 14 ноября 2018

Если одного типа недостаточно для определения зависимости, вы можете использовать @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
    ...
}
...