Hilt ile Dependency Injection

Güncelleme tarihi: 3 Ağu 2021



Hilt, Android projelerinizde manuel DI kaynağını azaltan bir Dependency Injection kütüphanesidir. Manuel Dependency Injection yapmak her sınıfı ve bağımlılıklarını elle inşa etmeyi gerektirir. Dependency Injection kütüphaneleri ise otomatik oluşturulan kodları kullanarak test edilebilir ve daha fazla yeniden kullanılabilir kod oluşturmak için biz geliştiricilere fayda sağlar.


Hilt projenizdeki her Android bileşenine container sağlayarak yaşam döngülerini sizin için otomatik olarak yönetir ve böylece uygulamanızda DI yapmanın standart bir yolunu tanımlar. Hilt, Dagger'ın üzerine inşa edilmiştir, Bu nedenle Dagger'ın sağladığı derleme zamanı performansı, ölçeklenebilirlik ve Android Studio desteğinden faydalanır.


Birçok Android framework sınıfı işletim sisteminin kendisi tarafından oluşturulduğundan , Android uygulamalarında Dagger kullanırken ilgili bir şablon mevcuttur. Hilt ise Dagger'dan farklı olarak Jetpack ve Android framework sınıflarıyla entegre edilmiştir ve bu şablonların bir çoğunu kaldırarak sadece önemli kısımlara odaklanmanızı sağlar. En önemlisi ise Hilt ve Dagger bir arada kullanılabilir.


Hilt Kullanımı


Hilt'in kullanımının ne kadar kolay olduğunu anlayabilmek için tipik bir Android uygulamasında hızlı bir şekilde DI uygulayalım. Örneğin AnalyticsAdapter sınıfımızı MainActivity e inject etmek istediğimizi düşünelim.


Öncelikle Hilt'in kod oluşturmasını tetiklemek için @HiltAndroidApp annotation'unu ekleyelim.


@HiltAndroidApp
class MyApplication : Application() { ... }

İkinci olarak AnalyticsAdapter constructor'una @Inject annotation'u ekleyerek instance'ları nasıl sağlayacağını söylememiz gerek.


class AnalyticsAdapter @Inject constructor() { ... }

Sonrasında MainActivity'e bir AnalyticsAdapter instance'ı inject etmek için, @AndroidEntryPoint annotation'ı ile activityde Hilt'i etkinleştirin ve @Inject kullanarak enjeksiyonu kullanın.


@AndroidEntryPoint
class MainActivity : AppCompatActivity() {  @Inject lateinit var analytics: AnalyticsAdapter  
      override fun onCreate(savedInstanceState: Bundle?) {
      super.onCreate(savedInstanceState)    
  }
}


Daha fazla bilgi ve referans alınan yazı için:

https://medium.com/androiddevelopers/dependency-injection-on-android-with-hilt-67b6031e62d