Java 如果没有@Providers注释方法,则无法提供(Android Kotlin中的Dagger 2)

Java 如果没有@Providers注释方法,则无法提供(Android Kotlin中的Dagger 2),java,android,kotlin,retrofit2,dagger-2,Java,Android,Kotlin,Retrofit2,Dagger 2,在许多网站和各种文章中搜索过,但没有效果,因此我请求您帮助使用Dagger 2(DI) 我不明白是什么问题 我是匕首2(Di)新手,我正在学习,请帮助我理解 我的代码: MainActivity.kt class MainActivity : AppCompatActivity() { @Inject lateinit var networkService: NetworkService override fun onCreate(savedInstanceState

在许多网站和各种文章中搜索过,但没有效果,因此我请求您帮助使用Dagger 2(DI)

我不明白是什么问题

我是匕首2(Di)新手,我正在学习,请帮助我理解

我的代码:

MainActivity.kt

class MainActivity : AppCompatActivity() {

    @Inject
    lateinit var networkService: NetworkService

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

        App().gerAppComponents().inject(mainActivity = this)

        setContentView(R.layout.activity_main)

        networkService.buildService(service = Movies::class.java).getPopularMovie(apiKey = "test", language = "en-US", page = 1)

    }

}
App.kt

class App : Application() {

    fun gerAppComponents(): AppComponent {
        return DaggerAppComponent.builder().appNetworkModule(AppNetworkModule())
            .build()
    }
}
ServiceBuild.kt

object ServiceBuild : NetworkService {
    private val client = OkHttpClient.Builder().build()

    private val retrofit: Retrofit = Retrofit.Builder()
        .baseUrl("https://api.themoviedb.org/3")
        .addConverterFactory(GsonConverterFactory.create())
        .client(client)
        .build()

    override fun <T> buildService(service: Class<T>): T = retrofit.create(service)
}
AppComponent.kt

@Singleton
@Component(modules = arrayOf(AppNetworkModule::class))
interface AppComponent {
    fun inject(mainActivity: MainActivity)
}
构建错误

app/build/tmp/kapt3/stubs/debug/com/rebus/client/di/components/AppComponent.java:10: error: [Dagger/MissingBinding] com.rebus.client.services.impl.NetworkService cannot be provided without an @Provides-annotated method.
    public abstract void inject(@org.jetbrains.annotations.NotNull()
                         ^
      com.rebus.client.services.impl.NetworkService is injected at
          com.rebus.client.MainActivity.networkService
      com.rebus.client.MainActivity is injected at
          com.rebus.client.di.components.AppComponent.inject(com.rebus.client.MainActivity)

将代码
ServiceBuild
更改为
NetworkService
,如下所示:

@Module
class AppNetworkModule {

    @Provides
    @Singleton
    fun getRetrofitService(): NetworkService {
        return ServiceBuild
    }
}
app/build/tmp/kapt3/stubs/debug/com/rebus/client/di/components/AppComponent.java:10: error: [Dagger/MissingBinding] com.rebus.client.services.impl.NetworkService cannot be provided without an @Provides-annotated method.
    public abstract void inject(@org.jetbrains.annotations.NotNull()
                         ^
      com.rebus.client.services.impl.NetworkService is injected at
          com.rebus.client.MainActivity.networkService
      com.rebus.client.MainActivity is injected at
          com.rebus.client.di.components.AppComponent.inject(com.rebus.client.MainActivity)
@Module
class AppNetworkModule {

    @Provides
    @Singleton
    fun getRetrofitService(): NetworkService {
        return ServiceBuild
    }
}