Moduulit, @Provides ja @Binds
Määrittäkää Hiltille, miten tyypit rakennetaan.
Moduulit, @Provides ja @Binds on ilmainen Jetpack Compose Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Jetpack Compose Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Jetpack Compose Academy-kurssilla on yhteensä 4 oppituntia.
Kun konstruktorin injektointi ei riitä
Et voi lisätä @Inject-annotaatiota konstruktorille, jota et omista, kuten Retrofit- tai OkHttp-oliolle. Hilt tarvitsee toisen tavan oppiakseen, miten nämä luodaan.
Tutustu moduleihin
Moduuli on luokka, joka opettaa Hiltille, miten luodaan tyyppejä, joita se ei pysty rakentamaan itse. Rekisteröi moduuli merkitsemällä se @Module-annotaatiolla.
@Module
object NetworkModule { }Asenna komponenttiin
Jokainen moduuli ilmoittaa sijaintinsa @InstallIn-annotaatiolla. SingletonComponent tekee sen sidonnat saataville koko sovelluksessa koko prosessin ajaksi.
@Module
@InstallIn(SingletonComponent::class)
object NetworkModuleTarjoa tyyppi @Provides-annotaatiolla
@Provides merkitsee funktion, jonka palauttamaa arvoa Hilt käyttää riippuvuutena. Funktion runko näyttää tarkasti, miten olio rakennetaan.
@Provides
fun provideApi(): ApiService = Retrofit.Builder().build().create(ApiService::class.java)Provides voi ottaa parametreja
@Provides-funktio voi pyytää muita riippuvuuksia parametreina. Hilt tarjoaa ne ensin ja suorittaa sitten funktion, joka kokoaa tuloksen.
@Provides
fun provideRepo(api: ApiService): Repo = Repo(api)Sido rajapinnat @Binds-annotaatiolla
Kun tarvitset vain rajapinnan yhdistämisen toteutukseen, @Binds on kevyempi kuin @Provides. Se kertoo Hiltille, mikä luokka toteuttaa rajapinnan.
@Binds
abstract fun bindRepo(impl: RepoImpl): Repo@Binds tarvitsee abstraktin moduulin
Koska @Binds-metodit ovat abstrakteja, niiden moduulin on oltava abstrakti luokka eikä objekti. Toteutuksen on oltava jo injektoitavissa.
@Module
@InstallIn(SingletonComponent::class)
abstract class RepoModuleProvides vai Binds
Käytä @Binds-annotaatiota yksinkertaiseen rajapinnan ja luokan yhdistämiseen ja @Provides-annotaatiota, kun olion rakentaminen vaatii koodin suorittamista. Binds tuottaa vähemmän koodia.
Merkitse singletonit
Lisää palveluntarjoajalle @Singleton, jotta Hilt luo olion kerran ja käyttää sitä uudelleen. Tämä sopii erinomaisesti raskaille asiakasolioille, kuten jaetulle OkHttp-instanssille.
@Provides
@Singleton
fun provideClient(): OkHttpClient = OkHttpClient()Erota toisistaan kvalifioijilla
Jos kaksi palveluntarjoajaa palauttaa saman tyypin, @Qualifier-annotaatio erottaa ne toisistaan. Tällöin Hilt tietää, minkä sidonnan kukin injektiokohta tarvitsee.
@Qualifier
annotation class AuthClientModuulit rakentavat graafin
Yhdessä moduulit muodostavat riippuvuusgraafin. Hilt lukee ne käännösaikana ja kytkee jokaisen tyypin yhteen tarkistettuun puuhun.
Pikatarkistus
Sinun on sidottava Repo-rajapinta sen ainoaan RepoImpl-luokkaan. Mikä vaihtoehto on kevyin?
Kertaus: Hiltin opettaminen rakentamaan
Näit, että moduulit opettavat Hiltille, miten luodaan tyyppejä, joita se ei pysty rakentamaan itse. @Provides on tarkoitettu koodia vaativiin tapauksiin ja @Binds rajapintojen yhdistämiseen. 🧩
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
- 30
- Oppitunnit
- 120
Usein kysytyt kysymykset
Onko oppitunti ”Moduulit, @Provides ja @Binds” ilmainen?
Kyllä – oppitunnin ”Moduulit, @Provides ja @Binds” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Jetpack Compose Academy-kurssin, päivitä CoddyKit PROhon. Jetpack Compose Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Moduulit, @Provides ja @Binds”?
Määrittäkää Hiltille, miten tyypit rakennetaan. Harjoittelet Jetpack Compose Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Jetpack Compose Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Jetpack Compose Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.
Kuinka kauan ”Moduulit, @Provides ja @Binds”-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ä Jetpack Compose Academy-oppitunnilla?
Kyllä. Jokainen Jetpack Compose 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
- Miksi DI: testattava ja irtikytketty koodi
- Moduulit, @Provides ja @Binds
- hiltViewModel ja @HiltViewModel
- Rajaukset ja komponenttien elinkaaret