-
Notifications
You must be signed in to change notification settings - Fork 0
Dagger β multi binding IntoMap
Devrath edited this page Oct 8, 2023
·
3 revisions
Contents |
|---|
| Observations |
| Output |
| Code |
- It is also similar to functionality of
IntoSet,ElementsIntoSetbut difference here is same as amaphas meaning it has akeyand avalue. - We can iterate the map and get to know both the
keyandvalue. - We need to use
@IntoMapin themodule - Also its better to add a function in
moduleannotated as@Multibindsjust to handle the empty set scenario.
class com.istudio.di.modules.dagger.demos.multibindings.intomap.implementation.Inkpen = com.istudio.di.modules.dagger.demos.multibindings.intomap.implementation.Inkpen@512e00a
class com.istudio.di.modules.dagger.demos.multibindings.intomap.implementation.Ballpen = com.istudio.di.modules.dagger.demos.multibindings.intomap.implementation.Ballpen@b08a07b
Contents |
|---|
| Implementations |
| Modules |
| Components |
| Activity |
Pen.kt
interface Pen {
fun name() : String
}Inkpen.kt
class Inkpen @Inject constructor() : Pen {
override fun name(): String {
return "Inkpen ^-^ Output"
}
}Ballpen.kt
class Ballpen @Inject constructor() : Pen {
override fun name(): String {
return "Ballpen ^-^ Output"
}
}PenModule.kt
@Module
@DisableInstallInCheck
interface PenModule {
@Multibinds
fun multibindsStringProviders(): Map<Class<*>, Pen>
@Binds
@IntoMap
@ClassKey(Inkpen::class)
fun provideInkPen(pen : Inkpen) : Pen
@Binds
@IntoMap
@ClassKey(Ballpen::class)
fun provideBallPen(pen : Ballpen) : Pen
}PenComponent.kt
@Component(modules = [PenModule::class])
interface PenComponent {
fun inject(activity: MyActivity)
fun providePen(): Map<Class<*>, @JvmSuppressWildcards Pen>
}MyActivity.kt
class DaggerElementsIIntoMapActivity : AppCompatActivity() {
private lateinit var binding: ActivityDaggerElementsIntoMapBinding
@Inject
lateinit var pen: Map<Class<*>,@JvmSuppressWildcards Pen>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityDaggerElementsIntoMapBinding.inflate(layoutInflater)
setContentView(binding.root)
setOnClickListeners();
}
private fun setOnClickListeners() {
binding.apply {
initiateId.setOnClickListener {
// Inject the component into the activity
val comp = DaggerPenComponent.builder()
.build().inject(this@DaggerElementsIIntoMapActivity)
for ((key, value) in pen) {
// Access specific functionalities
PrintUtils.printLog("$key = $value")
}
}
}
}
}