DaggerApplicationComponent未解决的参考

发布于 2025-02-09 23:58:29 字数 2720 浏览 2 评论 0原文

我正在尝试通过修改MVP应用程序Belajar应用程序在MVVM架构中应用DaggerApplicationComponent,但我刚刚遇到了未解决的参考错误:DaggerApplicationComponent。 Kotlin Kapt已被应用,我尝试重建项目,但是我从应用程序组件中获得了错误: C:\Users\3\AndroidStudioProjects\belajar3 - Copy (3)\app\build\tmp\kapt3\stubs\debug\id\kotlin\belajar\di\component\ApplicationComponent.java:8: error: [Dagger/MissingBinding ] RetRofit2.如果没有@Inject构造函数或 @提供的通知方法,则无法提供retrofit。 公共抽象接口应用程序Component扩展了匕首。Android.androidinjector< id.kotlin.belajar.belajarapp> gt; { ^ Retrofit2.ReTrofit注入 id.kotlin.belajar.di.module.homemodule.provideshomedatasource(Raterofit) id.kotlin.belajar.data.homedatasource注入 id.kotlin.belajar.presentation.homeviewmodel(dataSource) id.kotlin.belajar.presentation.homeviewmodel注入 id.kotlin.belajar.di.module.homemodule.bindhomeviewmodel(viewModel) java.util.map< java.lang.class<?扩展Androidx.lifeCycle.ViewModel>,Javax.Inject.Provider< androidx.lifecycle.viewmodel>>>注射在 id.kotlin.belajar.di.factory.viewmodelfactory(viewModels) id.kotlin.belajar.di.factory.viewmodelfactory被注入 id.kotlin.belajar.di.builder.activitybuilder.bindviewmodelfactory(工厂) androidx.lifecycle.viewmodelprovider.factory注入 id.kotlin.belajar.presentation.homectivity.viewmodelfactory id.kotlin.belajar.presentation.homctivity注入 Dagger.android.androidinjector.Indject(ID.Kotlin.Belajar.Presentation.homectivity)[id.kotlin.belajar.di.di.component.application.applicationcomponent? id.kotlin.belajar.di.builder.activitybuilder_contributehomectivity.homeyctivitysubcomponent]

我需要有关此问题的建议。谢谢。

这是代码:

applicationComponent:

import dagger.Component
import dagger.android.AndroidInjector
import dagger.android.support.AndroidSupportInjectionModule
import id.kotlin.belajar.BelajarApp
import id.kotlin.belajar.di.builder.ActivityBuilder
import id.kotlin.belajar.di.module.Networkmodule
import javax.inject.Singleton

@Singleton
@Component(modules = [
    AndroidSupportInjectionModule::class, Networkmodule::class,
    ActivityBuilder::class
])
interface ApplicationComponent : AndroidInjector<BelajarApp>

Belajarapp:

import dagger.android.AndroidInjection.inject
import dagger.android.AndroidInjector
import dagger.android.DaggerApplication
import id.kotlin.belajar.di.component.DaggerApplicationComponent


class BelajarApp : DaggerApplication(){
    override fun applicationInjector(): AndroidInjector<out DaggerApplication>? {
        return DaggerApplicationComponent.create().apply { inject(this@BelajarApp) }
    }
}

我的GitHub repo:

/coding-2.git

I'm trying to apply DaggerApplicationComponent in MVVM architecture by modifying MVP app, Belajar App, but I've just got error of Unresolved reference: DaggerApplicationComponent. Kotlin kapt has been applied and I've tried to rebuild project, but instead I got error from application component:
C:\Users\3\AndroidStudioProjects\belajar3 - Copy (3)\app\build\tmp\kapt3\stubs\debug\id\kotlin\belajar\di\component\ApplicationComponent.java:8: error: [Dagger/MissingBinding] retrofit2.Retrofit cannot be provided without an @Inject constructor or an @Provides-annotated method.
public abstract interface ApplicationComponent extends dagger.android.AndroidInjector<id.kotlin.belajar.BelajarApp> {
^
retrofit2.Retrofit is injected at
id.kotlin.belajar.di.module.HomeModule.providesHomeDatasource(retrofit)
id.kotlin.belajar.data.HomeDatasource is injected at
id.kotlin.belajar.presentation.HomeViewModel(datasource)
id.kotlin.belajar.presentation.HomeViewModel is injected at
id.kotlin.belajar.di.module.HomeModule.bindHomeViewModel(viewModel)
java.util.Map<java.lang.Class<? extends androidx.lifecycle.ViewModel>,javax.inject.Provider<androidx.lifecycle.ViewModel>> is injected at
id.kotlin.belajar.di.factory.ViewModelFactory(viewModels)
id.kotlin.belajar.di.factory.ViewModelFactory is injected at
id.kotlin.belajar.di.builder.ActivityBuilder.bindViewModelFactory(factory)
androidx.lifecycle.ViewModelProvider.Factory is injected at
id.kotlin.belajar.presentation.HomeActivity.viewModelFactory
id.kotlin.belajar.presentation.HomeActivity is injected at
dagger.android.AndroidInjector.inject(id.kotlin.belajar.presentation.HomeActivity) [id.kotlin.belajar.di.component.ApplicationComponent ? id.kotlin.belajar.di.builder.ActivityBuilder_ContributeHomeActivity.HomeActivitySubcomponent]

I need suggestion for this problem. Thank you.

This is the code:

ApplicationComponent:

import dagger.Component
import dagger.android.AndroidInjector
import dagger.android.support.AndroidSupportInjectionModule
import id.kotlin.belajar.BelajarApp
import id.kotlin.belajar.di.builder.ActivityBuilder
import id.kotlin.belajar.di.module.Networkmodule
import javax.inject.Singleton

@Singleton
@Component(modules = [
    AndroidSupportInjectionModule::class, Networkmodule::class,
    ActivityBuilder::class
])
interface ApplicationComponent : AndroidInjector<BelajarApp>

BelajarApp:

import dagger.android.AndroidInjection.inject
import dagger.android.AndroidInjector
import dagger.android.DaggerApplication
import id.kotlin.belajar.di.component.DaggerApplicationComponent


class BelajarApp : DaggerApplication(){
    override fun applicationInjector(): AndroidInjector<out DaggerApplication>? {
        return DaggerApplicationComponent.create().apply { inject(this@BelajarApp) }
    }
}

My github repo:

https://github.com/muhammadwibisonojanuar/Coding-2.git

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

淡水深流 2025-02-16 23:58:29

问题在于,在您的家庭模型中,您需要改造依赖性。

        @JvmStatic
        @Provides
        fun providesHomeDatasource(retrofit: Retrofit): HomeDatasource=
            retrofit.create(HomeDatasource::class.java)

但是没有类似的方法:

    @Provides
    fun provideRetrofit() : Retrofit {
       //Return Retrofit here
    }

创建上述方法,并且它们都可以使用。

您在网络模块中看到的您只提供构建器,但是您实际上并没有真正构建它:

    @Provides
    @Singleton
    fun providesHttpAdapter(client: OkHttpClient): Retrofit.Builder {
        return Retrofit.Builder().apply {
            client(client)
            baseUrl(BuildConfig.BASE_URL)
            addConverterFactory(GsonConverterFactory.create())
            addCallAdapterFactory(RxJava3CallAdapterFactory.createAsync())
        }
    }

The problem is that in your HomeModule you need a Retrofit dependency.

        @JvmStatic
        @Provides
        fun providesHomeDatasource(retrofit: Retrofit): HomeDatasource=
            retrofit.create(HomeDatasource::class.java)

But there is no method like:

    @Provides
    fun provideRetrofit() : Retrofit {
       //Return Retrofit here
    }

Create the above method and it will all work.

As you can see in your NetworkModule you only provide a Builder, but you do not actually build it:

    @Provides
    @Singleton
    fun providesHttpAdapter(client: OkHttpClient): Retrofit.Builder {
        return Retrofit.Builder().apply {
            client(client)
            baseUrl(BuildConfig.BASE_URL)
            addConverterFactory(GsonConverterFactory.create())
            addCallAdapterFactory(RxJava3CallAdapterFactory.createAsync())
        }
    }
傲性难收 2025-02-16 23:58:29

由于我真的不知道使用Kotlin,因此只遵循它,我想我需要您的意见。

Since I really don't know about using Kotlin, only follow it, I think I need your opinion about it.

enter image description here

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文