Middle+
Kuidas injekteerida ViewModel Dagger Hilt abil?
sobes.tech AI
Vastus AI-lt
Kasutades @HiltViewModel annotatsiooni otse ViewModelis ja @ActivityRetainedScoped või @ViewModelScoped annotatsioone sõltuvustele, mis peavad kestma sama kaua kui ViewModel või aktiivsus. Sõltuvused injekteeritakse konstruktoriga @Inject annotatsiooniga.
// ViewModel defineerimine
@HiltViewModel
class MyViewModel @Inject constructor(
private val myRepository: MyRepository // Sõltuvuse injekteerimine konstruktoriga
) : ViewModel() {
// ViewModel'i loogika
}
// Sõltuvuse (Repository) defineerimine
@ActivityRetainedScoped // Näidisskala
class MyRepository @Inject constructor() {
// Repositooriumi loogika
}
Activity või Fragment, ViewModel saadakse viewModels() või activityViewModels() delegaadi abil:
// Activity
@AndroidEntryPoint // Annotations Hilt komponentidele
class MyActivity : AppCompatActivity() {
private val viewModel: MyViewModel by viewModels() // ViewModel saamine delegaadi kaudu
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Kasutamine viewModel
}
}
// Fragment
@AndroidEntryPoint // Annotations Hilt komponentidele
class MyFragment : Fragment() {
private val viewModel: MyViewModel by viewModels() // Saadakse ViewModel selle fragmenti jaoks
// või
// private val activityViewModel: MyViewModel by activityViewModels() // Saadakse seotud aktiivsusega ViewModel
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
// Kasutamine viewModel
}
}
Vajalikud sõltuvused (näiteks moodulid, mis pakuvad MyRepository) peavad olema konfigureeritud Hilt moodulites.
// Hilt mooduli näide
@Module
@InstallIn(SingletonComponent::class) // Moodul installitud SingletonComponenti
object RepositoryModule {
@Provides
@Singleton // Näide sünkroniseeritud skoopist
fun provideMyRepository(): MyRepository {
return MyRepository() // Tagab MyRepository eksemplari
}
}