Android 无法为匕首注入提供上下文
我是dagger的新手,我想在我的类中注入上下文和网络(使用改型) 这是我目前的代码: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
@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
}