Я получаю сообщение об ошибке при запуске следующего кода. Я пытаюсь внедрить карту, созданную с помощью мультисвязывания Dagger, в экземпляр D
методом @Provides
.
Ошибка:
error: [Dagger/MissingBinding] java.util.Map<java.lang.Class<dagger.A>,java.lang.String> cannot be provided without an @Provides-annotated method.
public abstract dagger.D d();
^
java.util.Map<java.lang.Class<dagger.A>,java.lang.String> is injected at
dagger.ModuleA.provideD(map)
dagger.D is provided at
dagger.ComponentA.d()
Код:
open class A
class B : A()
class C : A()
data class D(val map: Map<Class<A>, String>)
@Module
object ModuleA {
@JvmStatic
@Provides
@IntoMap()
@ClassKey(B::class)
fun provideB(): String {
return "B"
}
@JvmStatic
@Provides
@IntoMap()
@ClassKey(C::class)
fun provideC(): String {
return "C"
}
@JvmStatic
@Provides
fun provideD(map: Map<Class<A>, String>): D {
return D(map)
}
}
@Component(modules = [ModuleA::class])
@Singleton
interface ComponentA {
fun d(): D
}
fun main(args : Array<String>) {
val dagger = DaggerComponentA.builder().build()
println(dagger.d())
}
Я не могу найти прямых примеров этого. Я нахожу только примеры, которые используют полевую инъекцию самой карты.
Поддерживается ли то, что я пытаюсь?