Dependency Injection i Kotlin for Android
Dette settet med oppgaver vil hjelpe deg ? forst? og bruke Dependency Injection (DI) i Kotlin for Android-utvikling ved hjelp av Hilt.
Oppvarmingsoppgaver: Grunnleggende Dependency Injection
F?r vi g?r over til Hilt, la oss utforske grunnleggende konsepter i Dependency Injection.
Oppgave 1: Manuell Dependency Injection
M?l: Forst? hvordan man manuelt injiserer avhengigheter uten et DI-rammeverk.
class Engine {
fun start() = "Engine started"
}
class Car(private val engine: Engine) {
fun drive() = "Driving with ${engine.start()}"
}
fun main() {
val engine = Engine()
val car = Car(engine)
println(car.drive())
}
Oppgave: Modifiser Engine
-klassen slik at den kan ta en parameter for motortype.
Oppgave 2: Bruk av Interfaces for Dependency Injection
M?l: Bruk interfaces for ? lage en fleksibel arkitektur.
interface Engine {
fun start(): String
}
class PetrolEngine : Engine {
override fun start() = "Petrol engine started"
}
class DieselEngine : Engine {
override fun start() = "Diesel engine started"
}
class Car(private val engine: Engine) {
fun drive() = "Driving with ${engine.start()}"
}
fun main() {
val petrolCar = Car(PetrolEngine())
val dieselCar = Car(DieselEngine())
println(petrolCar.drive())
println(dieselCar.drive())
}
Oppgave: Legg til en ElectricEngine
-klasse og test den med Car
.
Oppgave 3: Bruk av Fabrikkm?nster for Dependency Injection
M?l: Implementere et enkelt fabrikkm?nster for ? h?ndtere avhengigheter.
class EngineFactory {
fun createEngine(type: String): Engine {
return when (type) {
"petrol" -> PetrolEngine()
"diesel" -> DieselEngine()
else -> throw IllegalArgumentException("Unknown engine type")
}
}
}
fun main() {
val engineFactory = EngineFactory()
val petrolEngine = engineFactory.createEngine("petrol")
val dieselEngine = engineFactory.createEngine("diesel")
println(petrolEngine.start())
println(dieselEngine.start())
}
Oppgave: Modifiser EngineFactory
til ? st?tte ElectricEngine
og test den.
Dependency Injection med Hilt
N? som du har forst?tt grunnleggende Dependency Injection, kan vi g? over til Hilt.
Installer Hilt
F?lg den offisielle guiden for Hilt for ? sette opp Hilt i prosjektet ditt.
Oppgave 4: Grunnleggende Dependency Injection med Hilt
Kode:
@HiltAndroidApp
class MyApplication : Application()
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
@Inject lateinit var car: Car
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
println(car.drive())
}
}
class Engine @Inject constructor() {
fun start() = "Engine started with Hilt"
}
class Car @Inject constructor(private val engine: Engine) {
fun drive() = "Driving with ${engine.start()}"
}
Oppgave: Kj?r koden og verifiser at Car
-objektet blir injisert riktig.
Oppgave 5: Interface Injection med Hilt
M?l: Bruk interfaces med Hilt for ? muliggj?re fleksibilitet.
interface Engine {
fun start(): String
}
class PetrolEngine @Inject constructor() : Engine {
override fun start() = "Petrol engine started"
}
class DieselEngine @Inject constructor() : Engine {
override fun start() = "Diesel engine started"
}
class Car @Inject constructor(private val engine: Engine) {
fun drive() = "Driving with ${engine.start()}"
}
@Module
@InstallIn(SingletonComponent::class)
object EngineModule {
@Provides
fun provideEngine(): Engine = PetrolEngine()
}
Oppgave: Endre EngineModule
slik at det kan bytte mellom PetrolEngine
og DieselEngine
basert p? en parameter.
Oppgave 6: Bruk av Hilt-moduler
M?l: Definer og injiser avhengigheter ved hjelp av Hilt-moduler.
@Module
@InstallIn(SingletonComponent::class)
object AppModule {
@Provides
fun provideEngine(): Engine = PetrolEngine()
@Provides
fun provideCar(engine: Engine): Car = Car(engine)
}
Oppgave: Legg til en ElectricEngine
-klasse og modifiser AppModule
for ? bruke den.
Disse oppgavene vil gi deg en god forst?else av Dependency Injection i Kotlin for Android med Hilt. Lykke til!