Я новичок в кинжале, я хочу внедрить контекст и сеть (используя модернизацию) в мои классы.
это мой код:
@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 в моем базовом репозитории, но проблема в том, что у меня нет приложения или контекста в базовом репозитории
как мне это исправить?
Вторая проблема, с которой я столкнулся, это то, что я слышал, что однажды мне нужно сделать кинжал и использовать его во всем приложении, и я не должен делать это каждый раз, это означает, что я должен использовать приложение дляэто .
но как я могу использовать инжектор в классе приложения, это не имеет смысла