我正在学习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 {
}

08-16 21:03