Как внедрить LifecycleOwner в Android с помощью Dagger2? - PullRequest
0 голосов
/ 07 октября 2018

У меня есть компонент, поддерживающий жизненный цикл Android, со следующим интерфейсом:

class MyLifecycleAwareComponent @Inject constructor(
    private val: DependencyOne,
    private val: DependencyTwo
) {

    fun bindToLifecycleOwner(lifecycleOwner: LifecycleOwner) {
        ...
    }

    ...
}

Все специфические компоненты и модули Dagger настроены правильно и до сих пор прекрасно работали.

InКаждый раз, когда мне нужно использовать компонент, я делаю следующее:

class MyActivity: AppCompatActivity() {
    @Inject
    lateinit var component: MyLifecycleAwareComponent

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        component.bindToLifecycleOwner(this)
        ...
    }
}

Теперь я хочу избавиться от bindLifecycleOwner и обозначить свой компонент следующим образом:

class MyLifecycleAwareComponent @Inject constructor(
    private val: DependencyOne,
    private val: DependencyTwo,
    private val: LifecycleOwner
) {
    ...
}

Ипредоставить lifecycleOwner в рамках отдельных действий (которые реализуют интерфейс путем расширения AppCompatActivity).

Есть ли способ сделать это с помощью Dagger?

1 Ответ

0 голосов
/ 07 октября 2018

Вы можете привязать свою активность к LifecycleOwner из своего модуля активности:

@Module
abstract class ActivityModule {
    ...
    @Binds
    @ActivityScope
    abstract fun bindLifecycleOwner(activity: AppCompatActivity): LifecycleOwner
    ...
}
...