Uso de Dagger2 @ Component.Builder y @BindInstance con Kotlin | de fatihkkocak | Equipo de desarrollo de aplicaciones móviles | Noviembre de 2020

DI (inyección de dependencia) prensibinin ne kadar önemli olduğunu günden güne anlamaktayım. Bunun için DI ‘ı derinlemesine öğrenmeye çalışıyorum. Bu yazıda sizlere bir kaç gün önce Dagger2 konusunda araştırma yaparken karşıma çıkan enfes bir özelliği anlatacağım. Dagger2 konusunda belki de en çok hoşuma giden yapı belki de bu yapı olduğunu düşünüyorum 🙂

@ Component.Builder ve @BindInstance Nedir?

Çok kaba bir tabir olacak ama bu iki anotación Dagger2 için Component ‘a bind işlemi sırasında bir nevi extension yazmamıza neden oluyor. Peki neden böyle bir şey yapıyoruz? Hemen örnek vererek açıklayalım.

Bu gibi durumlarda parametre geçmek için methodlar sınıflar yazıp yazılan sınıflara constructor ‘lar ekliyorsanız işte horde bir yanlışlık olabilir. Çünkü norte tane modüle ‘ümüz olduğunu düşünelim. Inyectar ederken n tane método mu generar ettireceğiz? Tabikide hayır. Bu yanlış bir yaklaşım olur. Bunun yerine aşağıdaki eklemeleri yapmanız yeterli olacaktır.

İlk düzenleme Modüle Component Sınıfına eklenecek.

@Singleton
@Component(modules = [AppModule::class])
interface AppComponent {

fun inject(mainActivity: MainActivity)

@Component.Builder
abstract class Builder{
@BindsInstance
abstract fun bindContext(context: Context): Builder
abstract fun build(): AppComponent
}

}

Burada aslında Dagger ‘en şunu söylüyoruz. Ben modüller içerisine parametre geçmek istiyorum bunun için geçeceğim parametre «context» ve bu parametreyi geçerken kullanacağım methodun adı de «bindContext» olacaktır diyoruz.

Bu işlemi yaptıktan sonra clean & build etmemiz gerekecek ki dagger ‘a bu yazdığımız methodu ekleyebilelim.

Construya ettikten sonra aşağıdaki gibi inyecte kodumuzu değiştiriyoruz.

DaggerAppComponent.builder().bindContext(applicationContext).build().inject(this)

Gördüğünüz gibi bindContext methodu içerisinde applicationContext ‘i parametre olarak verebiliyoruz. Pruebe edebilmek içinde modüle tarafındaki proveedor içine basit bir Toast mesaj ekleyelim.

@Provides
internal fun provideSoftwareCompany(
context: Context,
uiDesigner: UiDesigner,
androidDeveloper: AndroidDeveloper
): SoftwareCompany {
Toast.makeText(context, "I'm using @BindInstance & @Component.Builder", Toast.LENGTH_LONG)
.show()

return SoftwareCompany(uiDesigner, androidDeveloper)
}

BindInstance ve Component.Builder eklediğimiz zaman proveedor methodlarına eklediğimiz parametreyi direk yazıp kullanabiliyoruz. Bu şekilde çok rahat bir şekilde parametre geçip kullanabiliriz ve aşırı derecede zahmet çekmemize böylelikle gerek kalmamış olur 🙂

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *