Jetpack Compose Academy · Lektion

Moduler, @Provides og @Binds

Fortæl Hilt, hvordan dine typer skal opbygges.

Lektion 2 af 413 trin

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 NetworkModule

Lever 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 RepoModule

Provides 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 AuthClient

Moduler 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. 🧩

Gratis at komme i gang

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

  1. Hvorfor DI: Testbar, afkoblet kode
  2. Moduler, @Provides og @Binds
  3. hiltViewModel og @HiltViewModel
  4. Scopes og komponenters levetid
← Tilbage til Jetpack Compose Academy