Получить контекст приложения с Dagger2 - PullRequest
0 голосов
/ 03 июля 2019

Я делаю приложение, используя шаблон MVP, и мне нужен контекст приложения для доступа к методу getString ().Для этого я использую Dagger2 за исключением того, что не знаю, как его реализовать

Итак, вот что я делал до сих пор:

BaseApplication.kt

class BaseApplication: Application() {

    lateinit var component: ApplicationComponent

    override fun onCreate() {
        super.onCreate()
        instance = this
        component = buildComponent()
        component.inject(this)
    }

    fun buildComponent(): ApplicationComponent {
        return DaggerApplicationComponent.builder()
            .applicationModule(ApplicationModule(this))
            .build()
    }

    fun getApplicationComponent(): ApplicationComponent {
        return component
    }

    companion object {
        lateinit var instance: BaseApplication private set
    }
}

ApplicationComponent.kt

@Component(modules = arrayOf(ApplicationModule::class))
interface ApplicationComponent {

    fun inject(application: Application)

}

ApplicationModule.kt

@Module
class ApplicationModule(private val context: Context) {


    @Singleton
    @Provides
    @NonNull
    fun provideContext(): Context {
        return context
    }
}

Я хочу предоставить контекстBaseApplication в адаптер моего утилита-ретранслятора, потому что мне нужен доступ к методу getString.

Что мне нужно сделать сейчас, когда я сделал это, чтобы получить контекст в моем адаптере?

1 Ответ

1 голос
/ 03 июля 2019

Чтобы предоставить applicationContext в кинжале, создайте новую область.

@javax.inject.Qualifier
annotation class ForApplication

Затем в вашем ApplicationModule вы предоставите эту зависимость, используя область.

@Singleton
@Provides
@NonNull
@ForApplication
fun provideContext(): Context {
    return context
}

Теперь везде, где вы хотите использовать этот контекст, просто добавьте к этой области префикс.Например

@Inject
class YourAdapter extends Adapter {
    YourAdapter(@ForApplication Context context) {

    }
}
...