I am studying Dagger2 now. I am studying by looking at several examples. But there are some parts that aren't working properly, looking at the examples. I know that the structure of Dagger2 should be defined and implemented in the order of application -> active -> user component. However, an error occurred when following this. the message is java.lang.RuntimeException: android.app.Application does not implement dagger.android.HasActivityInjector
The code is long, but I wish someone would show up to help me. I am very desperate.
AppComponent
@Singleton
@Component(modules = [AndroidSupportInjectionModule::class,
ActivityBindingModule::class,
ApplicationModule::class])
interface AppComponent : AndroidInjector<BaseApplication> {
@Component.Builder
interface Builder {
@BindsInstance
fun application(application: Application): Builder
fun build(): AppComponent
}
}
BaseApplication
class BaseApplication : DaggerApplication() {
override fun applicationInjector(): AndroidInjector<out DaggerApplication> {
return DaggerAppComponent.builder().application(this).build()
}
}
ActivityScope
@Scope
annotation class ActivityScope
ActivityBindingModule
@Module
abstract class ActivityBindingModule {
@ContributesAndroidInjector(modules = [MainModule::class])
abstract fun mainActivity(): MainActivity
}
MainModule
@Module
class MainModule {
@ActivityScope
@Provides
fun util() : Utils = Utils()
}
ApplicationModule
@Module
class ApplicationModule {
@Provides
fun providesContext(application: Application): Context {
return application
}
}
Utils
class Utils {
@Inject constructor(){
}
fun add(a :Int, b:Int):Int= a+b
fun sub(a :Int, b:Int):Int= a-b
fun div(a :Int, b:Int):Int= a/b
fun mul(a :Int, b:Int):Int= a*b
}
MainActivity
class MainActivity : DaggerAppCompatActivity(), HasActivityInjector {
lateinit var utils : Utils
@Inject
lateinit var activityDispatchingAndroidInjector: DispatchingAndroidInjector<Activity>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var aa = utils.add(10,20)
Log.d("TAG",""+aa)
}
override fun activityInjector(): AndroidInjector<Activity> {
return activityDispatchingAndroidInjector
}
}