Middle+
Ինչպես ներդնել ViewModel-ը Dagger Hilt-ով?
sobes.tech AI
Պատասխան AI-ից
З дапамогай анатацыі @HiltViewModel для самой ViewModel і @ActivityRetainedScoped або @ViewModelScoped для залежнасцей, якія павінны жыць столькі ж, колькі ViewModel або актыўнасць. Залежнасці інжектуюцца праз канструктар з анатацыяй @Inject.
// Вызначэнне ViewModel
@HiltViewModel
class MyViewModel @Inject constructor(
private val myRepository: MyRepository // Інжэкцыя залежнасці праз канструктар
) : ViewModel() {
// Логіка ViewModel
}
// Аб'яўленне залежнасці (Repository)
@ActivityRetainedScoped // Прыклад скоупа
class MyRepository @Inject constructor() {
// Логіка рэпазіторыя
}
У Activity або Fragment, ViewModel атрымліваецца з дапамогай дэльгата viewModels() або activityViewModels():
// У Activity
@AndroidEntryPoint // Анатацыя для Hilt-кампанентаў
class MyActivity : AppCompatActivity() {
private val viewModel: MyViewModel by viewModels() // Атрыманне ViewModel праз дэльгат
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Выкарыстанне viewModel
}
}
// У Fragment
@AndroidEntryPoint // Анатацыя для Hilt-кампанентаў
class MyFragment : Fragment() {
private val viewModel: MyViewModel by viewModels() // Атрыманне ViewModel для гэтага фрагмента
// або
// private val activityViewModel: MyViewModel by activityViewModels() // Атрыманне ViewModel, звязанай з актыўнасцю
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
// Выкарыстанне viewModel
}
}
Неабходныя залежнасці (напрыклад, модулі для прадастаўлення MyRepository) павінны быць настроены ў Hilt-модулях.
// Прыклад Hilt-модуля
@Module
@InstallIn(SingletonComponent::class) // Ўстаноўка модуля ў SingletonComponent
object RepositoryModule {
@Provides
@Singleton // Прыклад скоупа для сінглтона
fun provideMyRepository(): MyRepository {
return MyRepository() // Прапанаванне экземпляра MyRepository
}
}