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