-
Notifications
You must be signed in to change notification settings - Fork 0
Dagger β multi binding IntoSet
Devrath edited this page Oct 8, 2023
·
7 revisions
Contents |
|---|
| Observations |
| Output |
| Code |
Contents |
|---|
| Scopes |
| Implementations |
| Modules |
| Components |
| Activity |
Telivision.kt
interface Telivision {
fun name() : String
}Samsung.kt
class Samsung @Inject constructor() : Telivision {
override fun name(): String {
return "Samsung ^-^ Output"
}
}Lg.kt
class Lg @Inject constructor() : Telivision {
override fun name(): String {
return "Lg ^-^ Output"
}
}TelivisionBox.kt
class TelivisionBox @Inject constructor(
val telivision : Telivision
) { }TelivisionModule.kt
@Module
@DisableInstallInCheck
interface TelivisionModule {
@Binds
@IntoSet
fun providesSamsungTv(implementation : Samsung) : Telivision
@Binds
@IntoSet
fun providesLgTv(implementation : Lg) : Telivision
}TelivisionComponent.kt
@Component(modules = [TelivisionModule::class])
interface TelivisionComponent {
fun inject(activity : MyActivity)
fun provideTelivision() : Set<@JvmSuppressWildcards Telivision>
}MyActivity.kt
class DaggerMultiBindingIntoSetActivity : AppCompatActivity() {
private lateinit var binding: ActivityDaggerMultiBindingIntoSetBinding
@Inject lateinit var telivision: Set<@JvmSuppressWildcards Telivision>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityDaggerMultiBindingIntoSetBinding.inflate(layoutInflater)
setContentView(binding.root)
setOnClickListeners();
}
private fun setOnClickListeners() {
binding.apply {
initiateId.setOnClickListener {
// Inject the component into the activity
val comp = DaggerTelivisionComponent.builder().build()
comp.inject(this@DaggerMultiBindingIntoSetActivity)
// Print the entire set
println(telivision)
// Iterate the set of objects
telivision.forEach { tv ->
if(tv is Samsung){
// Access Samsung specific functionalities
println(tv.name())
}else if(tv is Lg){
// Access Lg specific functionalities
println(tv.name())
}
}
}
}
}
}