gpt4 book ai didi

android - 使用 Dagger 2 提供一个空的 Providers 映射的 @Multibiding

转载 作者:行者123 更新时间:2023-12-02 12:51:20 25 4
gpt4 key购买 nike

我的问题是:我正在尝试使用以下签名声明多重绑定(bind):Map<Class<out Fragment>, @JvmSuppressWildcards Provider<Fragment>> .当我有 IntoMap 时,多重绑定(bind)按预期工作在我的范围模块内。但是,此 map 可能为空,也可能不为空,具体取决于范围,因此,我明确声明 @Multibinds如文档所示,如下所示支持空 map :

@Module
abstract class FragmentModule {

@Multibinds
abstract fun fragmentProviderMap():
Map<Class<out Fragment>, @JvmSuppressWildcards Provider<Fragment>>
}

但是,此代码会产生以下错误消息:

error: @Multibinds methods must return Map or Set



调查 Dagger 2 的源代码,我发现这是一个提议:

@Test
public void providerMap() {
assertThatModuleMethod("@Multibinds abstract Map<String, Provider<Object>> providerMap();")
.withDeclaration(moduleDeclaration)
.hasError("@Multibinds methods must return Map<K, V> or Set<T>");
}

供引用,您可以找到此代码 here .

我有两个疑问:
  • 如果 Dagger 2 支持提供 Provider<*> 的“非空”映射使用多重绑定(bind),不允许具有相同签名的空 map 的原因可能是什么?
  • 有没有办法绕过这个限制,支持Provider<*>的空 map ? ?这将为我节省大量样板文件和不必要的 @Inject重复。

  • 感谢您的关注。

    最佳答案

    从单个映射多绑定(bind)定义中,Dagger 可以注入(inject)两者(Kotlin 等效项)Map<K, V>Map<K, Provider<V>> .

    也许你只是在寻找

    @Multibinds
    abstract fun fragmentProviderMap():
    Map<Class<out Fragment>, @JvmSuppressWildcards Fragment>

    ?

    参见 Dagger Multibindings 中的“映射多重绑定(bind)”和“声明多重绑定(bind)” .

    关于android - 使用 Dagger 2 提供一个空的 Providers 映射的 @Multibiding,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61558178/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com