Я хотел бы реализовать часть приложения, которая выполняет некоторые шаги, которые будут обрабатываться одним докладчиком. Я объявил одну область:
@Scope
annotation class FormScope
далее я хотел объявить модуль, который обеспечивал бы необходимые зависимости:
@Module
object FormModule {
@JvmStatic
@Provides
fun providesFragmentManager(activity: FragmentActivity): FragmentManager = activity.supportFragmentManager
@JvmStatic
@Provides
fun providesNavigation(fragmentManager: FragmentManager): SobergridCoachingNavigationUnauthorizedFirstStep = SobergridCoachingNavigationUnauthorizedFirstStep(fragmentManager)
@JvmStatic
@Provides
fun providesCoordinator(navigation: NavigationUnauthorized): CoordinatoUnauthorized = CoordinatoUnauthorized(navigation)
@JvmStatic
@Provides
@Reusable
fun providesPresenter(coordinator: CoordinatoUnauthorized): OnboardingFragmentContract.Presenter = FormPresenter(coordinator)
}
и, наконец, я связываю модули в фрагменты, в которые я хочу вставить зависимости:
@Module(includes = [AndroidSupportInjectionModule::class])
abstract class FragmentBindingModule {
@FormScope
@ContributesAndroidInjector(modules = [FormFirstModule::class, FormModule::class])
abstract fun contributesFormFirst(): FormFirstFragment
@ContributesAndroidInjector(modules = [FormSecondModule::class, FormModule::class])
abstract fun contributesFormSecond(): FormSecondFragment
@ContributesAndroidInjector(modules = [FormThirdModule::class, FormModule::class])
abstract fun contributesFormThird(): FormThirdFragment
}
Проблема, с которой я сталкиваюсь, заключается в том, что каждый раз, когда показывается новый фрагмент, Кинжал создает новый экземпляр Presenter. Я хочу использовать одного докладчика для всех этих фрагментов. Что я делаю не так? Что я должен улучшить, чтобы достичь своей цели?
UPDATE
Я также пытался аннотировать мой метод предоставления с помощью @Singleton
@JvmStatic
@Provides
@Signleton
fun providesPresenter(coordinator: CoordinatoUnauthorized): OnboardingFragmentContract.Presenter = FormPresenter(coordinator)
но это приводит к ошибке компиляции. Последнее, что я пытался сделать, - это поместить аннотации (@Reusable
и @Singleton
) перед объявлением класса Presenter. Этот подход не дает мне ошибок компиляции, но все же существует несколько экземпляров класса Presenter.