【发布时间】:2020-07-27 08:53:12
【问题描述】:
我有两个模块 :app 和 :settings。这是我的匕首配置。
我的组件:
@ApplicationScope
@Component(
modules = [
AndroidInjectionModule::class,
AndroidSupportInjectionModule::class,
RoutingModule::class,
SettingsModule::class
]
)
interface ELanguageComponent {
@Component.Builder
interface Builder {
@BindsInstance
fun application(application: Application): Builder
fun build(): ELanguageComponent
}
fun inject(application: BaseELanguageApplication)
}
RoutingModule:
@Module
class RoutingModule {
@Provides
fun ProvidesettingsFragmentRouter(router: SettingsRouter): SettingsFragment.Router = router
}
SettingsRouter:
class SettingsRouter @Inject constructor(
private val applicationStateManager: ApplicationStateManager
) : SettingsFragment.Router
SettingsModule:
@Module
abstract class SettingsModule {
@ActivityScope
@ContributesAndroidInjector(modules = [SettingsFragmentModule::class, ApplicationStateManagerModule::class])
abstract fun settingsActivity(): SettingsActivity
}
@Module
abstract class ApplicationStateManagerModule {
@Module
companion object {
@JvmStatic
@Provides
fun bindApplicationStateManager(settingsActivity: SettingsActivity): ApplicationStateManager = settingsActivity
}
}
我的SettingsFragmentModule:
@Module
abstract class SettingsFragmentModule {
@FragmentScope
@ContributesAndroidInjector
abstract fun settingsFragment(): SettingsFragment
}
SettingsFragment.Router 被注入到我的SettingsFragment 中:
class SettingsFragment : DaggerFragment() {
@Inject
lateinit var router: Router
...
}
我已经找到并阅读了this article,但这并没有多大帮助,因为错误不是那么解释性:
[匕首/缺失绑定] com.altissia.common.authentication.ApplicationStateManager 不能 在没有 @Provides 注释的方法的情况下提供。公共摘要 接口语言组件 { ^ com.altissia.common.authentication.ApplicationStateManager 在注入 com.altissia.router.SettingsRouter(applicationStateManager, ...) com.altissia.router.SettingsRouter 被注入 com.altissia.injection.module.RoutingModule.ProvidesettingsFragmentRouter(路由器) com.altissia.settings.fragment.SettingsFragment.Router 在注入 com.altissia.settings.fragment.SettingsFragment.router com.altissia.settings.fragment.SettingsFragment 被注入 dagger.android.AndroidInjector.inject(T) [com.altissia.injection.component.ELanguageComponent → com.altissia.settings.injection.module.SettingsModule_SettingsActivity.SettingsActivitySubcomponent → com.altissia.settings.injection.module.SettingsFragmentModule_SettingsFragment.SettingsFragmentSubcomponent]
我在这里缺少什么? ApplicationStateManager 是通过安装在SettingsModule 内部的ApplicationStateManagerModule 提供的。
【问题讨论】:
标签: android dependency-injection dagger-2