Post content
π€―ΠΠ΅ Π½ΡΠΆΠ½ΠΎ Π΄Π΅Π»Π°ΡΡ ΠΈΠ½ΠΆΠ΅ΠΊΡ Π²ΡΠ΅Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΡΡΡΠ΅ΡΠΈΠ» ΠΊΠΎΠ΄ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅: class MyViewModel( ... private val sendDataUseCase: SendDataUseCase, ... ): ViewModel() { // ΠΡΠ·ΡΠ²Π°Π΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π² UI Π½Π°ΠΆΠΌΡΡ Π½Π° "Send" fun onSendClicked(...) { viewModelScope.launch { sendDataUseCase.invoke(...) // Π»ΠΈΠ±ΠΎ sendDataUseCase(...) } } } sendDataUseCase Π½Π΅ Π½ΡΠΆΠ΅Π½ ΡΡΠ°Π·Ρ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, Π° Π½ΡΠΆΠ΅Π½ ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π°ΠΆΠΌΡΡ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ "Send" Π² UI, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΈ Π½Π΅ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΡΠΈ. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΡΡΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ Π½ΡΠΆΠ½Π° Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅, ΡΠΎ ΠΏΡΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠΈ Π² DI Π±ΡΠ΄Π΅Ρ ΡΡΠ°Π·Ρ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΡΠΎΠΉ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, ΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π½Π΅Π½ΡΠΆΠ½ΠΎΠΉ Π½Π°Π³ΡΡΠ·ΠΊΠ΅. Π― ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡ Π΄Π΅Π»Π°ΡΡ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° Provider ΠΈΠ»ΠΈ Lazy. ΠΠ΅ΡΠ²ΡΠΉ Π±ΡΠ΄Π΅Ρ Ρ ΠΎΠ΄ΠΈΡΡ Π·Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΡ Π² Π³ΡΠ°Ρ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, Π° Π²ΡΠΎΡΠΎΠΉ - ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ ΠΈ ΡΠΎΡ ΡΠ°Π½ΠΈΡ Π΅Ρ. // ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Dagger ΠΈΠ»ΠΈ Hilt class MyViewModel( ... private val sendDataUseCase: javax.inject.Provider<SendDataUseCase>, // ΠΈΠ»ΠΈ dagger.Lazy ... ): ViewModel() { fun onSendClicked(...) { viewModelScope.launch { sendDataUseCase.get() .invoke(...) } } } ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Koin Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΏΠΎΡΡΠ° (Π°ΠΊΡΡΠ°Π»ΡΠ½Π°Ρ Π²Π΅ΡΡΠΈΡ 4.0), Π΄Π΅Π»Π°ΡΡ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΡΠΉ ΠΈΠ½ΠΆΠ΅ΠΊΡ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π½Π΅Ρ: // ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Koin class MyViewModel(): ViewModel() { // ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π² Koin private val sendDataUseCase: SendDataUseCase by inject() fun onSendClicked(...) { viewModelScope.launch { // Π°Π½Π°Π»ΠΎΠ³ Provider - ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΠΈΠ· Π³ΡΠ°ΡΠ° val sendDataUseCase: SendDataUseCase = getKoin().get() sendDataUseCase.invoke(...) } } } Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ β Π±ΠΎΠ»Π΅Π΅ Π±ΡΡΡΡΡΠΉ ΡΡΠ°ΡΡ ΡΠΊΡΠ°Π½ΠΎΠ² (Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ Π³ΡΠ°ΡΠΎΠ²) β ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΡΡ ΠΎΠ΄Π° ΠΏΠ°ΠΌΡΡΠΈ β KOIN ΠΏΠΎΡΠ΅ΡΡ ΡΠ²Π½ΠΎΠΉ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅. ΠΠ½Π΅ Π±Ρ ΠΎΡΠ΅Π½Ρ Ρ ΠΎΡΠ΅Π»ΠΎΡΡ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π°Π½Π°Π»ΠΎΠ³ Provider ΠΈ Lazy Π² Koin ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ, Π½ΠΎ ΠΏΠΎΠΊΠ° ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ Π΄Π΅Π»Π°ΡΡ ΡΠ²ΠΎΠΈ ΠΎΠ±Π΅ΡΡΠΊΠΈ π #dagger#di#Π»ΡΡΡΠΈΠ΅ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ