Sobes.tech
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 экземплярын берүү
    }
}