Sobes.tech
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
    }
}