Android Academy · Oppitunti

Moduulit ja providerit

Kertokaa Hiltille, miten riippuvuudet luodaan.

Oppitunti 3/413 vaihetta

Moduulit ja providerit on ilmainen Android Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Android Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Android Academy-kurssilla on yhteensä 4 oppituntia.

Kertokaa Hiltille, miten objektit rakennetaan

Hilt voi rakentaa luokan automaattisesti, jos sen konstruktorissa on annotaatio @Inject. Rajapintojen tai tyyppien kohdalla, joita ette omista, Hiltille on kuitenkin annettava ohjeet Modulen avulla.

Konstruktorin kautta injektointi

Yksinkertaisin tapaus: merkitkää konstruktori annotaatiolla, jolloin Hilt tietää, miten luokka rakennetaan.

class Analytics @Inject constructor(
    private val api: ApiService
)

Kun konstruktorin kautta injektointi ei riitä

Ette voi lisätä annotaatiota seuraavien luokkien konstruktoriin:

  • Rajapinta (sillä ei ole konstruktoria).
  • Kirjastosta peräisin oleva luokka (esimerkiksi Retrofit tai Room).

Nämä tarvitsevat Modulen.

Modulen määrittäminen

@Module kertoo Hiltille, miten tyypit tarjotaan. @InstallIn ilmoittaa, mihin komponenttiin (rajaukseen) Module kuuluu.

import dagger.Module
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent

@Module
@InstallIn(SingletonComponent::class)
object NetworkModule

@Provides kirjastotyypeille

Käyttäkää @Provides-annotaatiota funktiossa, joka rakentaa ja palauttaa riippuvuuden. Hilt kutsuu sitä, kun kyseistä tyyppiä tarvitaan.

@Provides
@Singleton
fun provideRetrofit(): Retrofit =
    Retrofit.Builder()
        .baseUrl("https://api.example.com/")
        .build()

Providerit voivat riippua toisistaan

@Provides-funktio voi ottaa parametreja, jotka Hilt tarjoaa graafista.

@Provides
fun provideApi(retrofit: Retrofit): ApiService =
    retrofit.create(ApiService::class.java)

@Binds rajapinnoille

Voitte sitoa rajapinnan toteutukseen käyttämällä @Binds-annotaatiota abstraktissa Modulessa. Yksinkertaisessa sidonnassa se on tehokkaampi kuin @Provides.

@Module
@InstallIn(SingletonComponent::class)
abstract class RepoModule {
    @Binds
    abstract fun bindRepo(
        impl: NetworkUserRepository
    ): UserRepository
}

@Provides vai @Binds

  • @Binds — kun vain yhdistätte rajapinnan konstruktorin kautta injektoitavaan toteutukseen. Abstrakti funktio.
  • @Provides — kun objektin rakentaminen edellyttää koodin suorittamista (esimerkiksi builderia).

Rajaus @Singleton-annotaatiolla

Lisätkää providerille rajaus, kuten @Singleton, jotta Hilt käyttää samaa instanssia koko sovelluksessa uuden luomisen sijaan.

Rajauksen sovittaminen komponenttiin

Rajauksen on vastattava komponenttia: @Singleton kuuluu SingletonComponentiin, @ActivityScoped ActivityComponentiin ja niin edelleen.

Modulen yhteenveto

  • @Module + @InstallIn määrittää, missä sidonnat ovat käytettävissä.
  • @Provides rakentaa kirjasto- ja monimutkaiset tyypit.
  • @Binds yhdistää rajapinnat toteutuksiin.

Pikatarkistus

Testatkaa, miten hyvin ymmärrätte Moduleja ja providereita.

Kertaus

Opitte seuraavat asiat:

  • Konstruktorin kautta injektointi toimii, kun omistatte luokan.
  • @Module + @InstallIn opastaa Hiltia tarjoamaan muita tyyppejä.
  • @Provides rakentaa kirjasto- ja monimutkaiset objektit; @Binds yhdistää rajapinnat toteutuksiin.
  • Sovittakaa esimerkiksi @Singleton-rajaukset niitä vastaaviin komponentteihin.
Aloita maksutta

Opi Kotlin tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
36
Oppitunnit
152

Usein kysytyt kysymykset

Onko oppitunti ”Moduulit ja providerit” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Android Academy-oppimispolun 3 oppituntia, myös oppitunnin “Moduulit ja providerit”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Android Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Moduulit ja providerit”?

Kertokaa Hiltille, miten riippuvuudet luodaan. Harjoittelet Android Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Android Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Android Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.

Kuinka kauan ”Moduulit ja providerit”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Android Academy-oppitunnilla?

Kyllä. Jokainen Android Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Miksi riippuvuusinjektiota käytetään?
  2. Hiltin käyttöönotto
  3. Moduulit ja providerit
  4. Injektio ViewModeleihin
← Takaisin: Android Academy