Skip to main content

Inject into Activity

Koject provides additional support for injecting into Activities.

Setup for Activity

The following dependency is required to take advantage of the additional support.

dependencies {
implementation("com.moriatsushi.koject:koject-android-activity:1.3.0")
}

Please also refer to the Setup document.

Basic usage

You can use the ComponentActivity.inject() or ComponentActivity.lazyInject() methods to inject any provided type.

@Provides
@Singleton
class Repository

@Provides
class Controller(
private val repository: Repository
)
class MyActivity: ComponentActivity {
val controller: Controller by lazyInject()
}

Inject Activity / Context into other types

Koject defines the @ActivityComponent and adding this annotation restricts it to be injectable only to Activity or ActivityComponent types.

@ActivityComponent
class ActivityHelper
@ActivityComponent
class ActivityHelperHolder(
val helper: ActivityHelper // can be injected
)
class MyActivity: ComponentActivity {
val helper: ActivityHelper by lazyInject() // can be injected
}

ActivityComponent types can be injected with androidx.activity.ComponentActivity and android.app.Activity.

@ActivityComponent
class ActivityHelper(
val activity: ComponentActivity // can be injected
)

Similarly, android.content.Context can be injected by adding an @ActivityContext qualifier.

@ActivityComponent
class ActivityHelper(
@ActivityContext
val context: Context // activity's context
)

Inject Activity's CoroutineScope

The ActivityComponent type can also inject an activity-scoped CoroutineScope. The CoroutineScope requires an @ActivityCoroutineScope qualifier.

@ActivityComponent
class ActivityHelper(
@ActivityCoroutineScope
val coroutineScope: CoroutineScope // same as ComponentActivity.lifecycleScope
)
LINK

Check the Android components documentation for all available components for Android.