Middle+
Kā injicēt ViewModel, izmantojot Dagger Hilt?
sobes.tech AI
Atbilde no AI
Ar izmantojot @HiltViewModel anotāciju pašā ViewModel un @ActivityRetainedScoped vai @ViewModelScoped anotācijas atkarībām, kas jādzīvo tikpat ilgi kā ViewModel vai aktivitāte. Atkarības injicētas caur konstruktoru ar @Inject anotāciju.
// ViewModel definīcija
@HiltViewModel
class MyViewModel @Inject constructor(
private val myRepository: MyRepository // Atkarības injekcija caur konstruktoru
) : ViewModel() {
// ViewModel loģika
}
// Atkarības (Repository) deklarācija
@ActivityRetainedScoped // Piemēra sērija
class MyRepository @Inject constructor() {
// Repozitora loģika
}
Activity vai Fragment, ViewModel tiek iegūts ar viewModels() vai activityViewModels() delegātu palīdzību:
// Aktivitātē
@AndroidEntryPoint // Anotācija Hilt komponentiem
class MyActivity : AppCompatActivity() {
private val viewModel: MyViewModel by viewModels() // Iegūst ViewModel ar delegātu
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Izmantošana viewModel
}
}
// Fragmentā
@AndroidEntryPoint // Anotācija Hilt komponentiem
class MyFragment : Fragment() {
private val viewModel: MyViewModel by viewModels() // Iegūst ViewModel šim fragmentam
// vai
// private val activityViewModel: MyViewModel by activityViewModels() // Iegūst saistīto ar aktivitāti ViewModel
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
// Izmantošana viewModel
}
}
Nepieciešamās atkarības (piemēram, moduļi, kas nodrošina MyRepository) ir jāiestata Hilt moduļos.
// Hilt moduļa piemērs
@Module
@InstallIn(SingletonComponent::class) // Modulis instalēts SingletonComponent
object RepositoryModule {
@Provides
@Singleton // Sērijas piemērs singletonam
fun provideMyRepository(): MyRepository {
return MyRepository() // Nodrošina MyRepository instanci
}
}