Middle+
Wie injiziert man ein ViewModel mit Dagger Hilt?
sobes.tech KI
Antwort von AI
Mit der Annotation @HiltViewModel für das ViewModel selbst und @ActivityRetainedScoped oder @ViewModelScoped für Abhängigkeiten, die so lange leben sollen wie das ViewModel oder die Aktivität. Abhängigkeiten werden über den Konstruktor mit der Annotation @Inject injiziert.
// Definition des ViewModels
@HiltViewModel
class MyViewModel @Inject constructor(
private val myRepository: MyRepository // Abhängigkeit durch Konstruktorinjektion
) : ViewModel() {
// Logik des ViewModels
}
// Deklaration der Abhängigkeit (Repository)
@ActivityRetainedScoped // Beispiel Scope
class MyRepository @Inject constructor() {
// Logik des Repositories
}
In der Activity oder im Fragment wird das ViewModel mit dem Delegaten viewModels() oder activityViewModels() abgerufen:
// In der Activity
@AndroidEntryPoint // Annotation für Hilt-Komponenten
class MyActivity : AppCompatActivity() {
private val viewModel: MyViewModel by viewModels() // ViewModel mit Delegat abrufen
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Verwendung des viewModel
}
}
// Im Fragment
@AndroidEntryPoint // Annotation für Hilt-Komponenten
class MyFragment : Fragment() {
private val viewModel: MyViewModel by viewModels() // ViewModel für dieses Fragment
// oder
// private val activityViewModel: MyViewModel by activityViewModels() // ViewModel, das mit der Aktivität verbunden ist
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
// Verwendung des viewModel
}
}
Notwendige Abhängigkeiten (z.B. Module zur Bereitstellung von MyRepository) sollten in Hilt-Modulen konfiguriert werden.
// Beispiel eines Hilt-Moduls
@Module
@InstallIn(SingletonComponent::class) // Modul im SingletonComponent installieren
object RepositoryModule {
@Provides
@Singleton // Beispiel Scope für Singleton
fun provideMyRepository(): MyRepository {
return MyRepository() // Bereitstellung einer Instanz von MyRepository
}
}