1
我有一對夫婦實現的接口:爲什麼Guice沒有找到我的清單<Interface>的綁定?
interface PuNoManager {
fun notifyUser(userId: Int)
}
class FcmManager
@Inject
constructor(val fcmClient: FcmClient) : PuNoManager {
override fun notifyUser(userId: Int) { ... }
}
class ApnsManager
@Inject
constructor(val apnsClient: ApnsClient) : PuNoManager {
override fun notifyUser(userId: Int) { ... }
}
這是在我的Module
既束縛,用@Provides
-annotated方法一起獲得List<PuNoManager>
:
class PuNoModule: AbstractModule() {
override fun configure() {
bind(ApnsManager::class.java)
bind(FcmManager::class.java)
}
@Provides
fun puNoManagers(apnsManager: ApnsManager, fcmManager: FcmManager): List<PuNoManager> {
return listOf(apnsManager, fcmManager)
}
}
問題出現當我有一個類需要List<PuNoManager>
-Guice抱怨該類型未被綁定:
Explicit bindings are required and java.util.List<? extends ...PuNoManager> is not explicitly bound.
while locating java.util.List<? extends ...PuNoManager>
我知道我的Guice設置正在工作,因爲我之前只有ApnsManager
並且正在添加第二個PuNoManager
,FcmManager
。問題源於請求注射List<PuNoManager>
的相關類別,而不僅僅是ApnsManager
。
嘗試'@JvmSuppressWildcards列表'或'MutableList ' –
大的解決方法的想法,註釋沒有工作,但改變構造函數的請求一個'MutableList'得到了注射正常工作。當我在'@ Provide'方法中調出調試器時,'listOf()'創建一個'ArrayList',這確實是一個可變列表。 –
我認爲註釋應該是'List <@JvmSuppressWildcards PuNoManager>'? –