Middle+
Dagger Hilt колдонуп ViewModel кантип инжекттелет?
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 экземплярын берүү
}
}