我已经简化了我的应用程序以找到问题的根源,这是简化的版本。我正在使用以下配置实现 Dagger 2:
应用组件
@Component(modules = [
AndroidSupportInjectionModule::class,
ActivityBindingModule::class
])
interface AppComponent: AndroidInjector<MyApp> {
@Component.Builder
interface Builder{
@BindsInstance
fun application(application: Application): Builder
fun build(): AppComponent
}
}
活动绑定模块
@Module
abstract class ActivityBindingModule {
@ContributesAndroidInjector
abstract fun mainActivity(): MainActivity
@Module
companion object{
@JvmStatic
@Provides
fun provideString(mainActivity: MainActivity): String{
return "Tent"
}
}
}
主要活动
class MainActivity : DaggerAppCompatActivity() {
@Inject
lateinit var string: String
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
println("meco simplest ${string}")
}
}
当我运行该应用程序时,出现以下错误。我不明白的是ContributesAndroidInjector
已经提供了一个实例MainActivity
为什么 Dagger 仍然抱怨它。
如果没有 @Inject 构造函数或
@Provides注解的方法
EDIT对于@yavor
保持所有类原样并分开活动绑定模块实现为两个类。现在您可以看到该实例MainActivity
提供了,Dagger 并没有抱怨它。活动绑定模块
@Module
abstract class ActivityBindingModule {
@ContributesAndroidInjector(modulese [StringProviderModule::class])
abstract fun mainActivity(): MainActivity
}
字符串提供者模块
@Module
class StringProviderModule {
@Module
companion object{
@JvmStatic
@Provides
fun provideString(mainActivity: MainActivity): String{
return "Tent"
}
}
}