Middle+
Hogyan injektáljuk a ViewModel-t Dagger Hilt segítségével?
sobes.tech MI
Válasz az MI-től
A @HiltViewModel annotációval a ViewModel-hez, és @ActivityRetainedScoped vagy @ViewModelScoped annotációkkal azokhoz a függőségekhez, amelyeknek ugyanannyi ideig kell élniük, mint a ViewModel vagy az aktivitás. A függőségek a @Inject annotációval ellátott konstruktoron keresztül injektálódnak.
// ViewModel meghatározása
@HiltViewModel
class MyViewModel @Inject constructor(
private val myRepository: MyRepository // Függőség injektálása konstruktoron keresztül
) : ViewModel() {
// ViewModel logikája
}
// Függőség deklarálása (Repository)
@ActivityRetainedScoped // Példa scope
class MyRepository @Inject constructor() {
// Repository logikája
}
Az Activity vagy Fragment esetében a ViewModel a viewModels() vagy activityViewModels() delegált segítségével szerezhető be:
// Activity-ben
@AndroidEntryPoint // Anotáció a Hilt komponensekhez
class MyActivity : AppCompatActivity() {
private val viewModel: MyViewModel by viewModels() // ViewModel beszerzése delegált segítségével
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// A viewModel használata
}
}
// Fragmentben
@AndroidEntryPoint // Anotáció a Hilt komponensekhez
class MyFragment : Fragment() {
private val viewModel: MyViewModel by viewModels() // A ViewModel beszerzése ehhez a fragmenthez
// vagy
// private val activityViewModel: MyViewModel by activityViewModels() // A ViewModel beszerzése az aktivitáshoz kötve
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
// A viewModel használata
}
}
A szükséges függőségek (pl. modulok a MyRepository biztosításához) a Hilt modulokban kell legyenek konfigurálva.
// Hilt modul példája
@Module
@InstallIn(SingletonComponent::class) // A modul telepítése a SingletonComponent-be
object RepositoryModule {
@Provides
@Singleton // Scope például singleton
fun provideMyRepository(): MyRepository {
return MyRepository() // Egy példány biztosítása a MyRepository-ból
}
}