Moduler, @Provides og @Binds
Fortæl Hilt, hvordan dine typer skal opbygges.
Moduler, @Provides og @Binds er en gratis Jetpack Compose Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Jetpack Compose Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Jetpack Compose Academy-kurset indeholder 4 lektioner i alt.
Når konstruktørinjektion ikke er nok
Du kan ikke tilføje @Inject til en konstruktør, du ikke ejer, f.eks. en Retrofit- eller OkHttp-instans. Hilt har brug for en anden måde at lære, hvordan de skal oprettes.
Mød modulet
Et modul er en klasse, der lærer Hilt, hvordan typer oprettes, når Hilt ikke selv kan konstruere dem. Markér det med @Module for at registrere det.
@Module
object NetworkModule { }Installér i en komponent
Hvert modul angiver, hvor det hører til, med @InstallIn. SingletonComponent gør dets bindinger tilgængelige i hele appen under hele processen.
@Module
@InstallIn(SingletonComponent::class)
object NetworkModuleLever en type med @Provides
@Provides markerer en funktion, hvis returværdi Hilt bruger som en afhængighed. Funktionens krop viser præcis, hvordan den oprettes.
@Provides
fun provideApi(): ApiService = Retrofit.Builder().build().create(ApiService::class.java)Provides kan tage parametre
En @Provides-funktion kan bede om andre afhængigheder som parametre. Hilt leverer dem først og kører derefter din funktion for at samle resultatet.
@Provides
fun provideRepo(api: ApiService): Repo = Repo(api)Bind grænseflader med @Binds
Når du blot skal knytte en grænseflade til en implementering, er @Binds mere enkel end @Provides. Den fortæller Hilt, hvilken klasse der opfylder grænsefladen.
@Binds
abstract fun bindRepo(impl: RepoImpl): Repo@Binds kræver et abstrakt modul
Fordi @Binds-metoder er abstrakte, skal deres modul være en abstrakt klasse og ikke et objekt. Implementeringen skal allerede kunne injiceres.
@Module
@InstallIn(SingletonComponent::class)
abstract class RepoModuleProvides kontra Binds
Brug @Binds til en enkel mapping fra grænseflade til klasse, og @Provides når du skal køre kode for at oprette objektet. Binds genererer mindre kode.
Markér singletoner
Tilføj @Singleton til en udbyder, så Hilt opretter objektet én gang og genbruger det. Perfekt til tunge klienter som en delt OkHttp-instans.
@Provides
@Singleton
fun provideClient(): OkHttpClient = OkHttpClient()Skab entydighed med kvalifikatorer
Hvis to udbydere returnerer samme type, adskiller en @Qualifier-annotation dem. Derefter ved Hilt, hvilken binding hvert injektionspunkt ønsker.
@Qualifier
annotation class AuthClientModuler opbygger grafen
Tilsammen danner dine moduler afhængighedsgrafen. Hilt læser dem ved kompilering og forbinder hver type i et sammenhængende, verificeret træ.
Hurtigt tjek
Du skal binde en Repo-grænseflade til dens eneste RepoImpl-klasse. Hvad er det enkleste valg?
Opsummering: Lær Hilt at opbygge
Du så, at moduler lærer Hilt, hvordan typer oprettes, når Hilt ikke selv kan konstruere dem, med @Provides til kode og @Binds til mappings mellem grænseflader. 🧩
Lær Kotlin med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 30
- Lektioner
- 120
Ofte stillede spørgsmål
Er lektionen “Moduler, @Provides og @Binds” gratis?
Ja — hele teksten til “Moduler, @Provides og @Binds” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Jetpack Compose Academy-kurset, skal du opgradere til CoddyKit PRO. Jetpack Compose Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Moduler, @Provides og @Binds”?
Fortæl Hilt, hvordan dine typer skal opbygges. Du øver dig i Jetpack Compose Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Jetpack Compose Academy?
Der kræves ingen tidligere erfaring. Jetpack Compose Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.
Hvor lang tid tager lektionen “Moduler, @Provides og @Binds”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Jetpack Compose Academy-lektion?
Ja. Alle Jetpack Compose Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Hvorfor DI: Testbar, afkoblet kode
- Moduler, @Provides og @Binds
- hiltViewModel og @HiltViewModel
- Scopes og komponenters levetid