我现在正在研究 Dagger2。我通过看几个例子来学习。但是有些部分不能正常工作,看看例子。我知道Dagger2的结构应该按照应用-> Activity ->用户组件的顺序来定义和实现。但是,执行此操作时发生错误。消息是 java.lang.RuntimeException: android.app.Application does not implement dagger.android.HasActivityInjector代码很长,但我希望有人能帮助我。我很绝望。
应用组件
@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
}
}
基础应用
class BaseApplication : DaggerApplication() {
override fun applicationInjector(): AndroidInjector<out DaggerApplication> {
return DaggerAppComponent.builder().application(this).build()
}
}
Activity 范围
@Scope
annotation class ActivityScope
Activity 绑定(bind)模块
@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
}
主要 Activity
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{
}




