Sobes.tech
Middle+

Dagger Hilt istifadə edərək ViewModel necə injekt etmək olar?

sobes.tech Süni İntellekt

AI-dan cavab

@HiltViewModel anotasyonu ilə ViewModel üçün və @ActivityRetainedScoped və ya @ViewModelScoped anotasyonları ilə ViewModel və ya fəaliyyət qədər yaşaması lazım olan asılılıqlar üçün. Asılılıqlar @Inject anotasyonu ilə inşa edilən konstruktor vasitəsilə injektsiya edilir.

// ViewModel-in təyini
@HiltViewModel
class MyViewModel @Inject constructor(
    private val myRepository: MyRepository // Konstruktor vasitəsilə asılılığın injektsiyası
) : ViewModel() {
    // ViewModel-in məntiqi
}
// Asılılığın (Repository) bəyanatı
@ActivityRetainedScoped // Nümunə scope
class MyRepository @Inject constructor() {
    // Repository məntiqi
}

Activity və ya Fragment-də, ViewModel viewModels() və ya activityViewModels() delegatları ilə alınır:

// Activity-də
@AndroidEntryPoint // Hilt komponentləri üçün anotasiya
class MyActivity : AppCompatActivity() {

    private val viewModel: MyViewModel by viewModels() // Delegat vasitəsilə ViewModel alınması

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // viewModel-dən istifadə
    }
}
// Fragment-də
@AndroidEntryPoint // Hilt komponentləri üçün anotasiya
class MyFragment : Fragment() {

    private val viewModel: MyViewModel by viewModels() // Bu fragment üçün ViewModel alınması
    // və ya
    // private val activityViewModel: MyViewModel by activityViewModels() // Aktivlik ilə əlaqəli ViewModel alınması

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        // viewModel-dən istifadə
    }
}

Lazımi asılılıqlar (məsələn, MyRepository təmin edən modullar) Hilt modullarında konfiqurasiya olunmalıdır.

// Hilt modulu nümunəsi
@Module
@InstallIn(SingletonComponent::class) // SingletonComponent-ə modul quraşdırılması
object RepositoryModule {

    @Provides
    @Singleton // Singleton üçün scope nümunəsi
    fun provideMyRepository(): MyRepository {
        return MyRepository() // MyRepository nümunəsinin təminatı
    }
}