Ведущий не вводится в моей активности в Dagger 2 - PullRequest
0 голосов
/ 08 марта 2019

Я изучаю Dagger 2 для создания проекта чистой архитектуры.Я искал несколько вопросов SO об этой же ошибке, но все еще не могу понять, почему она не работает.

Я запустил отладчик, чтобы посмотреть, идет ли моя View Activity к докладчику, но кажется,он не вводит докладчика, потому что он не направляется к докладчику.

Вот моя активность, в которой я внедряю докладчика.

ApodDetail.kt

 @Inject lateinit var presenter : ApodDetailPresenter

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_apod_detail)
        (application as SimpleMVPApplication).apodComponent.inject(this)
        fetchApodDetails()
        imageview_apoddetail_reloadDetail.bringToFront()
    }

PresenterModule.kt

@Module
class PresenterModule {

    @Provides
    @Singleton
    fun provideApodDetailPresenter(): ApodDetailPresenter {
        return ApodDetailPresenter(ApodDetailsInteractorImpl(), ImageCacheImpl())
    }

}

AppComponent.kt

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

    fun inject(target: ApodDetail)
}

AppModule.kt

@Module
class AppModule(private val app: Application) {

    @Provides
    @Singleton
    fun provideContext(): Context = app
}

SimpleMVPApplication.kt

class SimpleMVPApplication: Application() {

    lateinit var apodComponent: AppComponent

    override fun onCreate() {
        super.onCreate()
        apodComponent = initDagger(this)
    }

    private fun initDagger(app: SimpleMVPApplication): AppComponent =
            DaggerAppComponent.builder()
                    .appModule(AppModule(app))
                    .build()
}

И это ведущийчто я пытаюсь внедрить в ApodDetail.kt

ApodDetailPresenter.kt

class ApodDetailPresenter @Inject constructor(apodInteractor: ApodDetailsInteractorImpl, cache: ImageCacheImpl): ApodDetailContract.Presenter {

    var view: ApodDetailContract.View? = null
    var apodInteractor: ApodDetailsInteractorImpl? = null
    var cache: ImageCacheImpl? = null

    init {
        this.view = view
        this.apodInteractor = apodInteractor
        this.cache = cache
    }

Как я уже говорил выше, он не внедряет докладчика в мою активность.

1 Ответ

0 голосов
/ 08 марта 2019

В вашем классе Application вы пропускаете запрос на добавление модуля презентатора в компоновщик компонентов.Вам нужно:

private fun initDagger(app: SimpleMVPApplication): AppComponent =
            DaggerAppComponent.builder()
                    .appModule(AppModule(app))
                    .presenterModule(PresenterModule())
                    .build()
...