docs/reference/koin-android/qualifiers.md
This guide covers Android-specific qualifier patterns, particularly around Context handling.
:::info For general qualifier concepts (named, type-safe, enums, JSR-330), see Qualifiers. :::
Unlike Hilt, Koin automatically provides the Android Context without requiring qualifiers.
val androidModule = module {
// Context is automatically available
single {
SharedPreferences(
androidContext() // Application context automatically provided
)
}
single {
NotificationManager(
androidContext().getSystemService(Context.NOTIFICATION_SERVICE)
)
}
}
In Hilt, you need:
// Hilt requires explicit qualifiers
class MyRepository @Inject constructor(
@ApplicationContext private val context: Context
)
In Koin, it's automatic:
class MyRepository(
private val context: Context // Just use Context
)
val appModule = module {
single { MyRepository(androidContext()) }
}
:::info
Koin Advantage: The androidContext() function always provides the Application context. No qualifiers needed to distinguish between Application and Activity contexts.
:::
For cases where you need Activity context, don't inject it - use it directly:
class ScreenMetrics(private val activity: Activity) {
fun getScreenSize(): Point {
val display = activity.windowManager.defaultDisplay
return Point().also { display.getSize(it) }
}
}
// Don't define in modules - create directly in Activity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val metrics = ScreenMetrics(this) // Activity context used directly
}
}
:::warning
Best Practice: Avoid injecting Activity context into long-lived objects. It causes memory leaks. Use Application context (androidContext()) for dependencies that outlive an Activity.
:::
When you need multiple configurations of Android-specific dependencies:
val databaseModule = module {
single(named("user_db")) {
Room.databaseBuilder(
androidContext(),
UserDatabase::class.java,
"user-database"
).build()
}
single(named("cache_db")) {
Room.databaseBuilder(
androidContext(),
CacheDatabase::class.java,
"cache-database"
).build()
}
}