首页 > 解决方案 > Dagger2 错误:[Dagger/MissingBinding] com.testtask.hotels.data.IRepository 不能在没有@Provides-annotated 方法的情况下提供

问题描述

我正在研究 Dagger2,但出现错误:error: [Dagger/MissingBinding] com.testtask.hotels.data.IRepository cannot be provided without an @Provides-annotated method.

存储库模块

@Module(includes = [NetworkModule::class])
@DisableInstallInCheck
abstract class RepositoryModule {

    @Singleton
    @Binds
    abstract fun provideRepository(repository: RepositoryImpl): IRepository
}

RepositoryImpl

class RepositoryImpl @Inject constructor(
    private val api: ApiService,
) : IRepository {

    override suspend fun getHotels(): List<BaseHotelInfo> {
        return api.getHotels()
    }

    override suspend fun getConcreteHotelInfo(hotelId: Int): FullHotelInfo {
        return api.getConcreteHotel(hotelId)
    }
}

应用组件

@Component(modules = [RepositoryModule::class])
@Singleton
interface AppComponent {

    fun inject(app: App)
    fun inject(hotelsFragment: AllHotelsFragment)
    fun inject(rootActivity: RootActivity)
}

根活动

@AndroidEntryPoint
class RootActivity : BaseActivity<RootViewModel>() {

    companion object {
        private const val TAG = "M_RootActivity"
    }

    override val layout: Int = R.layout.activity_root

    override val viewModel: RootViewModel by viewModels()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }
}

根视图模型

@HiltViewModel
class RootViewModel @Inject constructor(
    val repository: IRepository
): BaseViewModel() {

}

我检查了@Binds 的指南,但我没有看到与我的任何差异可能是什么原因?

标签: androiddagger-2daggerdagger-hilt

解决方案


推荐阅读