I'm trying to follow the sample here
I have already used Dagger2 with the AndroidInjector successfully but now I was experimenting the new DaggerApplication
and DaggerAppCompatActivity
.
I get the error:
Error:(5, 1) error: [dagger.android.AndroidInjector.inject(T)] java.lang.String cannot be provided without an @Inject constructor or from an @Provides- or @Produces-annotated method.
I don't think that the new Dagger classes are causing the issue.
If I remove the @DeviceModel
in BuildModule.kt the code compiles.
Any suggestion?
Here the code:
The AppComponent.kt
@Component(modules = arrayOf(
AndroidSupportInjectionModule::class,
AppModule::class,
MainActivitySubComponent.MainActivityModule::class
))
interface AppComponent : AndroidInjector<App> {
@Component.Builder
abstract class Builder : AndroidInjector.Builder<App>()
}
The AppModule.kt
@Module(subcomponents = arrayOf(MainActivitySubComponent::class))
class AppModule {
}
The BuildModule.kt
@Module
class BuildModule {
@Provides
@DeviceModel
fun provideModel(): String {
return MODEL
}
}
The DeviceModel.kt
@Qualifier
@Retention(AnnotationRetention.RUNTIME)
@MustBeDocumented
annotation class DeviceModel
The MainActivitySubComponent.kt
@Subcomponent(modules = arrayOf(BuildModule::class))
interface MainActivitySubComponent : AndroidInjector<MainActivity> {
@Subcomponent.Builder
abstract class Builder : AndroidInjector.Builder<MainActivity>()
@Module(subcomponents = arrayOf(MainActivitySubComponent::class))
abstract class MainActivityModule {
@Binds
@IntoMap
@ActivityKey(MainActivity::class)
internal abstract fun bind(builder: MainActivitySubComponent.Builder): AndroidInjector.Factory<out Activity>
}
}
The *MainActivity.kt**
class MainActivity : DaggerAppCompatActivity() {
@Inject
@DeviceModel
lateinit var model: String
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
Log.d(model, model);
}
}
The App.kt
class App : DaggerApplication() {
override fun applicationInjector(): AndroidInjector<App> {
return DaggerAppComponent.builder().create(this)
}
}