大家好,
我想为我的AppModule类提供应用程序上下文。
我希望像我使用ApiService类一样在整个应用程序中提供PrefsHelper。
我的AppModule的代码:
@Module
@Suppress("unused")
object AppModule {
@Provides
@Reusable
@JvmStatic
internal fun provideApiService(retrofit: Retrofit): ApiService {
return retrofit.create(ApiService::class.java)
}
/**
* Provides the Retrofit object.
* @return the Retrofit object
*/
@Provides
@Reusable
@JvmStatic
internal fun provideRetrofitInterface(): Retrofit {
val interceptor: HttpLoggingInterceptor = HttpLoggingInterceptor().apply {
this.level = HttpLoggingInterceptor.Level.BODY
}
val client: OkHttpClient = OkHttpClient.Builder().apply { this.addInterceptor(interceptor) }.build()
return Retrofit.Builder()
.baseUrl(BuildConfig.BASE_URL)
.client(client)
.addCallAdapterFactory(RxJava2CallAdapterFactory.createWithScheduler(Schedulers.io()))
.addConverterFactory(GsonConverterFactory.create())
.build()
}
我以前在Java中看到的方法是创建一个构造函数,并以这种方式传入应用程序上下文。 Kotlin不允许使用object
如何在此类中提供上下文,以允许我提供PrefsHelper?
答案 0 :(得分:0)
将您的AppModule
更改为以下内容:
@Module
class AppModule(private val application: Application) {
@Singleton
@Provides
internal fun provideApplication(): Application = application
@Singleton
@Provides
internal fun providePrefs(application: Application): YourPref {
return YourPref(application)
}
}
答案 1 :(得分:0)
您还可以在AppComponent
中使用BindsInstance
注释。
因此您的AppComponent看起来像这样:
@Singleton
@Component(modules = YOUR_MODULES)
interface AppComponent {
//Whatever injections you have
@Component.Builder
interface Builder {
fun build(): AppComponent
@BindsInstance
fun application(Application application): Builder
}
}
然后,您只需将新方法添加到AppComponent
中的Application class
创建中即可。
DaggerAppComponent.builder().application(this).build()