Ошибка при предоставлении экземпляра, который имеет зависимость мульти-связывания Dagger

Это простой способ:

---
- name: Create user
  user: name=user shell=/bin/bash home=/srv/user groups=admin,sudo generate_ssh_key=yes ssh_key_bits=2048
- name: Set password to user
  shell: echo user:plain_text_password | sudo chpasswd
  no_log: True
0
задан Julian A. 17 January 2019 в 00:50
поделиться

1 ответ

Я понял:

open class A
class B : A()
class C : A()
data class D(val map: Map<Class<out A>, String>)

@MapKey
internal annotation class MyClassKey(val value: KClass<out A>)

@Module
object ModuleA {

    @JvmStatic
    @Provides
    @IntoMap()
    @MyClassKey(B::class)
    fun provideB(): String {
        return "B"
    }

    @JvmStatic
    @Provides
    @IntoMap()
    @MyClassKey(C::class)
    fun provideC(): String {
        return "C"
    }

    @JvmStatic
    @Provides
    @IntoMap()
    @MyClassKey(A::class)
    fun provideA(): String {
        return "A"
    }

    @JvmStatic
    @Provides
    fun provideD(map: Map<Class<out 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()
    val d = dagger.d()
    println(d.map) // {class dagger.B=B, class dagger.C=C, class dagger.A=A}
}

Мне нужно было предоставить пользовательскую аннотацию @MapKey:

@MapKey
internal annotation class MyClassKey(val value: KClass<out A>)

И изменить

fun provideD(map: Map<Class<A>, String>): D { 

на [ 118]

fun provideD(map: Map<Class<out A>, String>): D {
0
ответ дан Julian A. 17 January 2019 в 00:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: