Android 无法为匕首注入提供上下文

Android 无法为匕首注入提供上下文,android,dagger-2,androidinjector,Android,Dagger 2,Androidinjector,我是dagger的新手,我想在我的类中注入上下文和网络(使用改型) 这是我目前的代码: @Module // Safe here as we are dealing with a Dagger 2 module @Suppress("unused") object NetworkModule { @Provides @Reusable @JvmStatic internal fun provideMainApi(retrofit: Retrofit): Ma

我是dagger的新手,我想在我的类中注入上下文和网络(使用改型)

这是我目前的代码:

   @Module
// Safe here as we are dealing with a Dagger 2 module
@Suppress("unused")
object NetworkModule {
    @Provides
    @Reusable
    @JvmStatic
    internal fun provideMainApi(retrofit: Retrofit): MainApi {
        return retrofit.create(MainApi::class.java)
    }

    @Provides
    @Reusable
    @JvmStatic
    internal fun provideRetrofitInterface(): Retrofit {
        val interceptor = HttpLoggingInterceptor()
        interceptor.level = HttpLoggingInterceptor.Level.BODY
        val client = OkHttpClient.Builder().addInterceptor(interceptor).build()

        return Retrofit.Builder()
            .baseUrl(Constants.baseUrl)
            .addConverterFactory(MoshiConverterFactory.create())
            .addCallAdapterFactory(CoroutineCallAdapterFactory())
            .client(client)
            .build()
    }
}

@Module
class AppModule(private val app: Application) {
    @Provides
    @Singleton
    fun provideApplication() = app
}
这是我的组件:

    @Singleton
@dagger.Component(modules = arrayOf(AppModule::class, NetworkModule::class))
interface AppComponent {

    ///for injecting retrofit network
    fun injectMain(mainRepository: MainRepository)

    @dagger.Component.Builder
    interface Builder {
        fun build(): AppComponent

        fun networkModule(networkModule: NetworkModule): Builder
        fun appModule(appModule: AppModule):Builder
    }

}
我想在我的存储库中使用它,我有一个baseRepository:

    open class BaseRepository {
    private val injector: AppComponent = DaggerAppComponent
        .builder()
        .networkModule(NetworkModule)
        .build()

    init {
        inject()
    }

    private fun inject() {
        when (this) {
            is MainRepository -> injector.injectMain(this)
        }
    }

}
运行应用程序时,出现以下错误“module.AppModule必须设置”

我理解这个错误,我应该在我的基本存储库中提供appMOdule,但问题是我的基本存储库中没有任何应用程序或上下文

我该如何解决这个问题

我遇到的第二个问题是,我听说我应该制作一次匕首,并在我的整个应用程序中使用它,但我不应该每次都这样做,这意味着我应该使用该应用程序


但是我如何在应用程序类中使用injector,这是没有意义的

如果我是你,我会仔细检查这个项目,看看它是如何完成的

下面解释了该项目的内容:

您还可以检查此项目的匕首分支:

这一切都是由何塞·阿尔切雷卡和其他一些人完成的。这些是谷歌关于Android的指导方针,你的大部分问题都会有答案

但是我如何在应用程序类中使用injector,这没有意义有一个DaggerApplication类,您可以根据需要扩展和注入您的应用程序类

我告诉你们所有这些,因为我认为你们已经从古老的来源学会了匕首。我会改变你代码中的很多东西

另外,我使用Dagger已经1.5年了,我从来没有写过像:BaseRepository中那样的代码。我只使用@Inject注释,这是通过我的类实现的,这些类与匕首无关。在存储库中创建组件?->从来没有

这就是你的课程应该在任何地方结束的方式

class Repostory @Inject constructor(
private val dependency1: Dependency1 
) {}

class Activity {
@Inject lateinit var dependency2: Dependency2
}