-
Notifications
You must be signed in to change notification settings - Fork 0
Dagger β multi binding ElementsIntoSet
Devrath edited this page Oct 8, 2023
·
4 revisions
Contents |
---|
Observations |
Output |
Code |
- The observations and behaviors are same as mentioned here in this link
- The only difference being the
@Provides
method on how the objects are packed in the set
[com.istudio.di.modules.dagger.demos.multibindings.elementsintoset.implementation.Hyundai@1cf53ac, com.istudio.di.modules.dagger.demos.multibindings.elementsintoset.implementation.Maruti@3cd3875]
Hyundai ^-^ Output
Maruti ^-^ Output
Contents |
---|
Implementations |
Modules |
Components |
Activity |
Car.kt
interface Car {
fun name() : String
}
Hyundai.kt
class Hyundai @Inject constructor() : Car {
override fun name(): String {
return "Hyundai ^-^ Output"
}
}
Maruti.kt
class Maruti @Inject constructor() : Car {
override fun name(): String {
return "Maruti ^-^ Output"
}
}
CarModule.kt
@Module
@DisableInstallInCheck
interface CarModule {
companion object {
@Provides
@ElementsIntoSet
fun provideCars(): Set<@JvmSuppressWildcards Car> {
return setOf(
Hyundai(),
Maruti()
)
}
}
}
CarComponent.kt
@Component(modules = [CarModule::class])
interface CarComponent {
fun inject(activity: MyActivity)
fun provideCars(): Set<@JvmSuppressWildcards Car>
}
MyActivity.kt
class MyActivity : AppCompatActivity() {
private lateinit var binding: ActivityDaggerMultiBindingElementsIntoSetBinding
@Inject lateinit var car : Set<@JvmSuppressWildcards Car>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityDaggerMultiBindingElementsIntoSetBinding.inflate(layoutInflater)
setContentView(binding.root)
setOnClickListeners()
}
private fun setOnClickListeners() {
binding.apply {
initiateId.setOnClickListener {
val component = DaggerCarComponent.builder().build()
component.inject(this@DaggerMultiBindingElementsIntoSetActivity)
// Print the entire set
PrintUtils.printLog(car.toString())
car.forEach { c ->
if(c is Maruti){
// Access Maruti specific functionalities
PrintUtils.printLog(c.name())
}else if(c is Hyundai){
// Access hyundai specific functionalities
PrintUtils.printLog(c.name())
}
}
}
}
}
}