Как получить объект из компонента приложения с помощью Dagger 2 в Android? - PullRequest
0 голосов
/ 19 сентября 2019

Я работаю над очень плохим проектом Android.Все его классы Singletons следуют неправильному шаблону.Итак, я пытаюсь сделать его лучше.

Этот проект содержит только модуль app (поэтому это не многомодульный проект).

Это то, что я добавил:

@Singleton
@Component(modules = [AppModule::class])
interface AppComponent {

    @Component.Factory
    interface Factory {
        fun create(@BindsInstance applicationContext: Context): AppComponent
    }

}

@Module
object AppModule {

    @Singleton
    @Provides
    @JvmStatic
    fun provideAppContext(context: Context) = context

    @Singleton
    @Provides
    @JvmStatic
    fun provideAppDataManager(ctx: Context) = AppDataManager.setupInstance(ctx)

}

class SiteFinderApplication : Application() {

    val component: AppComponent by lazy {
        DaggerAppComponent
                .factory()
                .create(this)
    }

    override fun onCreate() {
        super.onCreate()

    }

}

Итак, исходя из моего понимания, AppDataManager объект создается, когда пользователь запускает приложение.Если мое предположение верно, то мой вопрос заключается в том, как получить объект AppDataManager из компонента Application в других моих действиях?

1 Ответ

0 голосов
/ 19 сентября 2019

Хорошо, я нашел способ.Для всех, у кого такая же проблема, может сделать что-то вроде этого.

Я изменил свой класс AppComponent следующим образом:

@Singleton
@Component(modules = [AppModule::class])
interface AppComponent {

    @Component.Factory
    interface Factory {
        fun create(@BindsInstance applicationContext: Context): AppComponent
    }

    fun getAppDataManager(): AppDataManager
}

И из своей деятельности я могу получить AppDataManager как это:

appDataManager = (application as SiteFinderApplication).component.getAppDataManager()
...