希望经过日复一日的研究这个非常感兴趣的主题“继承的子组件”后在这里找到一些帮助multibindings
你可以在这里找到继承的子组件多重绑定 https://dagger.dev/multibindings这是该页面的最后一个主题。
根据官方文档:
subComponent
可以添加元素到multibound
绑定在其父级中的集合或映射。当发生这种情况时,集合或映射会根据注入位置的不同而有所不同。当它被注入到定义的绑定中时subcomponent
,那么它具有由子组件定义的值或条目multibindings
以及那些由父组件定义的multibindings
。当它被注入到父组件上定义的绑定中时,它仅具有在那里定义的值或条目。
换句话说。如果家长Component
has a multibound set or map
and a child component
绑定到该多重绑定,那么这些绑定将被链接/添加到父映射中,具体取决于这些绑定在匕首范围内注入的位置(如果有)。
这就是问题所在。
Using dagger version 2.24
在 Android 应用程序中使用Kotlin
。我有一个ApplicationComponent
利用新的@Component.Factory
方法。 ApplicationComponent 已安装AndroidSupportInjectionModule
.
我也有一个ActivitySubComponent
使用新的@Component.Factory
方法,这个方法使用以下方法链接到 AppComponentsubComponents
模块注释的参数。
这个 ActivitySubComponent 提供了一个ViewModel
通过这样的绑定
@Binds
@IntoMap
@ViewModelKey(MyViewModel::class)
fun provideMyViewModel(impl: MyViewModel): ViewModel
the @ViewModelKey
是自定义 Dagger 注释。
我也有一个像这样实现的 ViewModelFactory 。
@Singleton
class ViewModelFactory @Inject constructor(
private val viewModelsToInject: Map<Class<out ViewModel>, @JvmSuppressWildcards Provider<ViewModel>>
) : ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>): T =
viewModelsToInject[modelClass]?.get() as T
}
一个普通的 ViewModelFactory
此处的区别在于,我在 AppComponents 模块之一中提供此 ViewModelFactory。但是 ActivitySubComponent 中的绑定 viewModel 不会添加到 AppComponent 中的 ViewModelFactory 映射中。
换句话说。文档所描述的情况根本没有发生。
如果我将 viewModels 绑定移动到任何 AppComponent 模块中,那么一切都可以工作。
你知道这里会发生什么吗?