Middle+
Dagger Hilt kullanarak ViewModel nasıl enjekte edilir?
sobes.tech yapay zeka
AI'dan gelen yanıt
ViewModel kendisi için @HiltViewModel anotasyonu ve ViewModel veya aktivite ile aynı ömür süresine sahip olması gereken bağımlılıklar için @ActivityRetainedScoped veya @ViewModelScoped anotasyonları kullanılır. Bağımlılıklar, @Inject anotasyonu ile işaretlenmiş yapıcı (constructor) aracılığıyla enjekte edilir.
// ViewModel tanımı
@HiltViewModel
class MyViewModel @Inject constructor(
private val myRepository: MyRepository // Yapıcı aracılığıyla bağımlılık enjeksiyonu
) : ViewModel() {
// ViewModel mantığı
}
// Bağımlılık (Repository) bildirimi
@ActivityRetainedScoped // Örnek scope
class MyRepository @Inject constructor() {
// Repository mantığı
}
Activity veya Fragment'ta, ViewModel viewModels() veya activityViewModels() delegeleri kullanılarak alınır:
// Activity'de
@AndroidEntryPoint // Hilt bileşenleri için anotasyon
class MyActivity : AppCompatActivity() {
private val viewModel: MyViewModel by viewModels() // ViewModel'ı delegate ile al
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// viewModel kullanımı
}
}
// Fragment'ta
@AndroidEntryPoint // Hilt bileşenleri için anotasyon
class MyFragment : Fragment() {
private val viewModel: MyViewModel by viewModels() // Bu fragment için ViewModel al
// veya
// private val activityViewModel: MyViewModel by activityViewModels() // Aktivite ile ilişkili ViewModel
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
// viewModel kullanımı
}
}
Gerekli bağımlılıkların (örneğin, MyRepository sağlayan modüller) Hilt modüllerinde yapılandırılması gerekir.
// Hilt modülü örneği
@Module
@InstallIn(SingletonComponent::class) // SingletonComponent'e modül kurulumu
object RepositoryModule {
@Provides
@Singleton // Singleton scope örneği
fun provideMyRepository(): MyRepository {
return MyRepository() // MyRepository örneği sağlanır
}
}