0Pricing
Android Academy · Ders

Hilt ile Bağımlılık Enjeksiyonu

Hilt ile bağımlılık yönetimini basitleştirin. @HiltAndroidApp, @AndroidEntryPoint, @HiltViewModel, @Module, @Provides ve @Singleton kapsamlarını kullanın.

Hilt ile Bağımlılık Enjeksiyonu, CoddyKit'te ücretsiz bir Android Academy dersidir. Bu, 6 dersinin 6. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Android Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Android Academy kursu toplamda 6 dersten oluşur.

Bağımlılık Enjeksiyonu Nedir?

Bağımlılık Enjeksiyonu (DI), bir nesnenin bağımlılıklarını kendisinin oluşturması yerine ihtiyaç duyduğu şeylerle birlikte sağlanmasıdır.

DI olmadan bir sınıf kendi bağımlılıklarını oluşturur; bu, sıkı bağlı ve test edilmesi zor bir yapı oluşturur. DI ile bağımlılıklar dışarıdan enjekte edilir; böylece yapı gevşek bağlı olur, test edilmesi ve değiştirilmesi kolaylaşır.

Elle DI ve Hilt

Elle DI kullanmak mümkündür ancak uygulama büyüdükçe zahmetli hâle gelir:

// Manual DI — you create and pass everything:
val db = AppDatabase.getInstance(context)
val dao = db.userDao()
val repo = UserRepository(dao)
val factory = UserViewModel.Factory(repo)
val viewModel = ViewModelProvider(this, factory)[UserViewModel::class.java]

// With Hilt:
// Just annotate, Hilt does the wiring
@HiltViewModel
class UserViewModel @Inject constructor(private val repo: UserRepository) : ViewModel()

Hilt Ekleme

Projenize Hilt ekleyin:

// project/build.gradle:
buildscript {
    dependencies {
        classpath 'com.google.dagger:hilt-android-gradle-plugin:2.51'
    }
}

// app/build.gradle:
plugins {
    id 'com.google.dagger.hilt.android'
    id 'kotlin-kapt'
}

dependencies {
    implementation 'com.google.dagger:hilt-android:2.51'
    kapt 'com.google.dagger:hilt-android-compiler:2.51'
}

@HiltAndroidApp

Application sınıfınıza @HiltAndroidApp ekleyin. Bu, Hilt bileşen hiyerarşisinin giriş noktasıdır:

@HiltAndroidApp
class MyApp : Application()

// Also register in AndroidManifest.xml:
// <application android:name=".MyApp" ...>

@AndroidEntryPoint

Enjekte edilmiş bağımlılıklara ihtiyaç duyan Activity, Fragment ve Service bileşenlerine @AndroidEntryPoint ekleyin:

@AndroidEntryPoint
class MainActivity : AppCompatActivity() {

    @Inject lateinit var analytics: AnalyticsService

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        analytics.logEvent("app_open")
    }
}

@AndroidEntryPoint
class HomeFragment : Fragment() {
    // Fragment's parent Activity must also be @AndroidEntryPoint
}

@Inject — Kurucu Enjeksiyonu

Hilt'e sınıfı nasıl oluşturacağını belirtmek için kurucuyu @Inject ile işaretleyin. Hilt, tüm parametreleri otomatik olarak çözümler:

class UserRepository @Inject constructor(
    private val userDao: UserDao,
    private val apiService: ApiService
) {
    suspend fun getUsers() = userDao.getAll()
    suspend fun syncFromNetwork() {
        val users = apiService.fetchUsers()
        userDao.insertAll(users)
    }
}

// Hilt sees UserRepository needs UserDao and ApiService,
// and automatically creates and injects them.

@HiltViewModel

ViewModel'ınıza @HiltViewModel ekleyin ve @Inject constructor kullanın. Fragment içinde onu by viewModels() ile alın:

@HiltViewModel
class UserViewModel @Inject constructor(
    private val repo: UserRepository
) : ViewModel() {

    val users = repo.getUsersFlow().asLiveData()
}

// In Fragment:
@AndroidEntryPoint
class UserFragment : Fragment() {
    private val viewModel: UserViewModel by viewModels()  // Hilt provides it
}

@Module ve @Provides

Hilt kurucu enjeksiyonunu kullanamadığında (örneğin arayüzlerde veya üçüncü taraf sınıflarında), örnekleri bir @Module aracılığıyla sağlayın:

@Module
@InstallIn(SingletonComponent::class)   // lives for app lifetime
object NetworkModule {

    @Provides
    @Singleton
    fun provideRetrofit(): Retrofit {
        return Retrofit.Builder()
            .baseUrl("https://api.example.com/")
            .addConverterFactory(GsonConverterFactory.create())
            .build()
    }

    @Provides
    @Singleton
    fun provideApiService(retrofit: Retrofit): ApiService {
        return retrofit.create(ApiService::class.java)
    }
}

@Binds — Arayüz Bağlama

Bir arayüz için hangi uygulamanın kullanılacağını Hilt'e bildirmek üzere @Binds kullanın:

interface AnalyticsService {
    fun logEvent(name: String)
}

class FirebaseAnalytics @Inject constructor() : AnalyticsService {
    override fun logEvent(name: String) { /* Firebase impl */ }
}

@Module
@InstallIn(SingletonComponent::class)
abstract class AnalyticsModule {

    @Binds
    @Singleton
    abstract fun bindAnalytics(impl: FirebaseAnalytics): AnalyticsService
}

Hilt Kapsamları

Kapsamlar, enjekte edilen bir örneğin ne kadar süreyle yaşayacağını belirler:

  • @Singleton — uygulamanın yaşam süresi boyunca tek örnek (ApplicationComponent)
  • @ActivityRetainedScoped — yapılandırma değişikliklerinden sonra da varlığını sürdürür
  • @ActivityScoped — Activity başına bir örnek
  • @FragmentScoped — Fragment başına bir örnek
  • @ViewModelScoped — ViewModel başına bir örnek

Hilt ile Test Etme

Hilt'in test desteğini kullanarak testlerde gerçek bağımlılıkları sahte bağımlılıklarla değiştirin:

@HiltAndroidTest
class UserRepositoryTest {

    @get:Rule
    val hiltRule = HiltAndroidRule(this)

    @Inject
    lateinit var repo: UserRepository

    @Before
    fun setUp() {
        hiltRule.inject()
    }

    @Test
    fun usersAreFetched() {
        assertNotNull(repo)
    }
}

Kısa Kontrol

Hilt'e tüm uygulamanız için DI bileşen hiyerarşisini oluşturmasını hangi ek açıklama bildirir?

Özet: Hilt ile Bağımlılık Enjeksiyonu

Hilt, Android'de DI işlemini neredeyse otomatik hâle getirir:

  • Application sınıfınızda @HiltAndroidApp
  • Activity ve Fragment'larda @AndroidEntryPoint
  • Enjekte edilebilir sınıflar için @Inject constructor
  • ViewModel'lar için @HiltViewModel + @Inject constructor
  • Üçüncü taraf sınıfları ve arayüzler için @Module + @Provides
  • Uygulama genelinde tek örneği paylaşmak için @Singleton

Sırada: Firebase Cloud Messaging ile anlık bildirimler.

Sıkça Sorulan Sorular

“Hilt ile Bağımlılık Enjeksiyonu” dersi ücretsiz mi?

Evet — “Hilt ile Bağımlılık Enjeksiyonu” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Android Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Android Academy kursu toplamda 6 dersten oluşur.

“Hilt ile Bağımlılık Enjeksiyonu” dersinde ne öğreneceğim?

Hilt ile bağımlılık yönetimini basitleştirin. @HiltAndroidApp, @AndroidEntryPoint, @HiltViewModel, @Module, @Provides ve @Singleton kapsamlarını kullanın. Android Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Android Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Android Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 6 dersinin 6. dersidir.

“Hilt ile Bağımlılık Enjeksiyonu” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Android Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Android Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. ViewModel ve LiveData
  2. Room Veritabanı
  3. Coroutines ve Suspend Fonksiyonları
  4. Repository Deseni
  5. Navigation Bileşeni
  6. Hilt ile Bağımlılık Enjeksiyonu
← Android Academy Sayfasına Dön