我正在学习Dagger2。我正在研究几个例子。但是,请看示例,其中有些部分无法正常工作。我知道Dagger2的结构应按照应用程序-> Activity ->用户组件的顺序进行定义和实现。但是,遵循此步骤时发生错误。消息是java.lang.RuntimeException: android.app.Application does not implement dagger.android.HasActivityInjector
代码很长,但是我希望有人能帮助我。我很绝望。
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
}
主模块
@Module
class MainModule {
@ActivityScope
@Provides
fun util() : Utils = Utils()
}
应用程序模块
@Module
class ApplicationModule {
@Provides
fun providesContext(application: Application): Context {
return application
}
}
实用程序
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
}
}
最佳答案
使应用程序类实现HasActivityInjector
类UserApplication扩展应用程序实现HasActivityInjector {
}