gpt4 book ai didi

kotlin - 如何修复 kotlin 中的 "[Dagger/MissingBinding]"?

转载 作者:行者123 更新时间:2023-12-02 13:35:58 25 4
gpt4 key购买 nike

我正在尝试在 AppComponent 中注入(inject) LatestChart,并且在没有 @Inject 构造函数或 @Provides-annotated 方法的情况下无法提供 [Dagger/MissingBinding] LatestChart 的问题...
在此先感谢您的帮助

最新图表.kt


class LatestChart {

@Inject
lateinit var context: Context

@Inject
lateinit var formatter: YearValueFormatter

lateinit var chart: LineChart


init {
App.appComponent.inject(this)
}

fun initChart(chart: LineChart) {
this.chart = chart

***

}


fun addEntry(value: Float, date: Float) {
***
}
}

private fun createSet(): LineDataSet {
***
}
return set
}
}

和 AppComponent.kt


@Component(modules = arrayOf(AppModule::class, RestModule::class, MvpModule::class, ChartModule::class))
@Singleton
interface AppComponent {

***

fun inject(chart: LatestChart)
}

编译错误:
***AppComponent.java:8: error: [Dagger/MissingBinding] sn0w.test.crypto.chart.LatestChart cannot be provided without an @Inject constructor or an @Provides-annotated method. This type supports members injection but cannot be implicitly provided.
public abstract interface AppComponent {
^
A binding with matching key exists in component: sn0w.test.crypto.di.AppComponent
sn0w.test.crypto.chart.LatestChart is injected at
sn0w.test.crypto.activities.ChartActivity.latestChart
sn0w.test.crypto.activities.ChartActivity is injected at
sn0w.test.crypto.di.AppComponent.inject(sn0w.test.crypto.activities.ChartActivity)



最佳答案

您当前尝试将依赖项注入(inject) LatestChart 的方式是如何满足 Dagger 不会创建的对象(例如事件)中的依赖关系。如果您创建 LatestChart自己反对(只是 val latestCharts = LatestCharts() ),你会看到 contextformatter实际上被注入(inject)到这个新创建的实例中。

但是,如果您希望 Dagger 注入(inject) LatestChart对象转换为另一个对象(转换为 ChartActivity 我假设基于编译错误),您必须让 Dagger 知道如何创建它的实例。有两种方法可以实现:

1.注释LatestChart @Inject 的构造函数

class LatestChart @Inject constructor(
private val context: Context,
private val formatter: YearValueFormatter
) {
lateinit var chart: LineChart

fun initChart(chart: LineChart) { ... }
fun addEntry(value: Float, date: Float) { ... }
private fun createSet(): LineDataSet { ... }
}

2. 在 Dagger 模块之一中创建提供者方法
class LatestChart(private val context: Context, private val formatter: YearValueFormatter) {
lateinit var chart: LineChart

fun initChart(chart: LineChart) { ... }
fun addEntry(value: Float, date: Float) { ... }
private fun createSet(): LineDataSet { ... }
}

@Module
class LatestChartModule {

@Module
companion object {
@JvmStatic
@Provides
fun provideLatestChart(context: Context, formatter: YearValueFormatter): LatestChart =
LatestChart(context, formatter)
}
}

关于kotlin - 如何修复 kotlin 中的 "[Dagger/MissingBinding]"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57304363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com