android - Dagger 2的问题

标签 android kotlin dagger

您好,我在我的项目中使用此配置的 dagger 2。

这是我的 SellerHubApplication.kt

class SellerHubApplication : Application(), HasAndroidInjector {

@Inject
lateinit var activityDispatchingAndroidInjector: AndroidInjector<Any>

override fun androidInjector(): AndroidInjector<Any> = activityDispatchingAndroidInjector

override fun onCreate() {
    super.onCreate()

    DaggerAppComponent.builder()
        .application(this)
        .build()
        .inject(this)

    Fresco.initialize(applicationContext)
}

}

这是我的 AppComponent.kt

@Singleton
@Component(modules = [AndroidInjectionModule::class, ActivityBuilder::class, AppModule::class])
interface AppComponent {

    @Component.Builder
    interface Builder {
        @BindsInstance
        fun application(app: Application): Builder

        fun build(): AppComponent
    }

    fun inject(app: SellerHubApplication)

}

运行应用程序后,我收到此错误“错误:[Dagger/MissingBinding] dagger.android.AndroidInjector 如果没有 @Provides 注释的方法,则无法提供。”

如果我将“funject(app:SellerHubApplication)”更改为“funinject(app:Application)”,应用程序会运行,但显示“activityDispatchingAndroidInjector尚未初始化”。请帮我解决这个问题。

最佳答案

尝试这样做:

应用程序组件:

@Singleton
@Component(modules = [AndroidInjectionModule::class, ActivityBuilder::class, AppModule::class, FragmentBuilder::class,])
interface AppComponent : AndroidInjector< SellerHubApplication > {

    @Component.Builder
    interface Builder {
        @BindsInstance
        fun application(application: SellerHubApplication): Builder

        fun applicationModule(applicationModule: AppModule): Builder
        fun build(): AppComponent
    }
}

应用:

class SellerHubApplication : Application(), HasActivityInjector, HasSupportFragmentInjector {

    @Inject
    lateinit var dispatchingAndroidInjector: DispatchingAndroidInjector<Activity>

    @Inject
    lateinit var fragmentInjector: DispatchingAndroidInjector<Fragment>


    companion object {
        lateinit var applicationComponent: AppComponent
            private set
    }


    override fun onCreate() {
        super.onCreate()

        init()
    }

    override fun activityInjector(): AndroidInjector<Activity> {
        return dispatchingAndroidInjector
    }

    override fun supportFragmentInjector(): AndroidInjector<Fragment> {
        return fragmentInjector
    }


    private fun init() {
        initDagger()
    }

    private fun initDagger() {
        applicationComponent = DaggerAppComponent
                .builder()
                .application(this)
                .applicationModule(AppModule(this))
                .build()

        applicationComponent.inject(this)
    }

}

应用程序模块:

@Module
class AppModule(private val application: SellerHubApplication) {

    @Provides
    @Singleton
    fun provideApplication(): Application {
        return application
    }
}

关于android - Dagger 2的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59194329/

相关文章:

java - 如何在 Android appium 中水平滑动

java - Jacoco 覆盖率和 Kotlin 默认参数

android - 实现 setState 导致 Infinite Loop Flutter

android - ProgressDialog 没有出现在 onProgressUpdate 方法中

android - 在 minSDK = 21 的情况下,如何在 Android/Kotlin 上处理日期?

android - 在 Espresso 中使用 Dagger

java - Dagger 2 注释处理器未针对 Java Gradle IntelliJ 项目运行

kotlin - 如何只有Dagger @subcomponent的一个实例?

android - "onMenuItemSelected"和 "onOptionsItemSelected"之间的区别

安卓房间 : Synchronous queries return null