Reputation: 1403
I happen to have an Android lifecycle aware component with the following interface:
class MyLifecycleAwareComponent @Inject constructor(
private val: DependencyOne,
private val: DependencyTwo
) {
fun bindToLifecycleOwner(lifecycleOwner: LifecycleOwner) {
...
}
...
}
All Dagger specific components and modules are configured correctly and have been working great so far.
In each activity when I need to use the component I do the following:
class MyActivity: AppCompatActivity() {
@Inject
lateinit var component: MyLifecycleAwareComponent
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
component.bindToLifecycleOwner(this)
...
}
}
Now I want to get rid of bindLifecycleOwner
and denote my component like this:
class MyLifecycleAwareComponent @Inject constructor(
private val: DependencyOne,
private val: DependencyTwo,
private val: LifecycleOwner
) {
...
}
And provide the lifecycleOwner
within the scope of individual activities (which implement the interface by extending AppCompatActivity
).
Is there any way to do it with Dagger?
Upvotes: 3
Views: 1570
Reputation: 4737
You may bind your Activity to LifecycleOwner from your ActivityModule:
@Module
abstract class ActivityModule {
...
@Binds
@ActivityScope
abstract fun bindLifecycleOwner(activity: AppCompatActivity): LifecycleOwner
...
}
Upvotes: 4