Dagger 2 - ошибка при предоставлении зависимости - PullRequest
0 голосов
/ 02 мая 2019

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

Моя цель на данный момент - просто ввести докладчика в мою точку зрения, цель состоит в том, чтобы отделить мою точку зрения на

presenter = Presenter(myInteractor())

Это то, что я пробовал

MyAppApplication

class MyAppApplication: Application() {

    lateinit var presentationComponent: PresentationComponent

    override fun onCreate() {
        super.onCreate()
        createPresentationComponent()
    }

    private fun createPresentationComponent() {
        presentationComponent = DaggerPresentationComponent.builder()
            .presentationModule(PresentationModule(this))
            .build()
    }
}

PresentationComponent

@Component(modules = arrayOf(PresentationModule::class))

@Singleton
interface PresentationComponent {

    fun inject(loginActivity: LoginView)
    fun loginUserPresenter(): LoginPresenter
}

PresentationModule

@Module
class PresentationModule(application: Application) {


    @Provides @Singleton fun provideLoginUserPresenter(signInInteractor: SignInInteractor): LoginPresenter {
        return LoginPresenter(signInInteractor)
    }

}

SignInInteractor

interface SignInInteractor {

    interface SignInCallBack {
        fun onSuccess()
        fun onFailure(errormsg:String)
    }

    fun signInWithEmailAndPassword(email:String,password:String,listener:SignInCallBack)
    fun firebaseAuthWithGoogle(account: GoogleSignInAccount, listener:SignInCallBack)

}

Теперь я подумал, что это все, что мне нужно, чтобы без проблем внедрить интерактор в презентатор, а затем внедрить презентера в моем поле зрения, но дает мне эту ошибку

error: [Dagger/MissingBinding] com.myapp.domain.interactor.logininteractor.SignInInteractor cannot be provided without an @Provides-annotated method.

Я немного сбит с толку, потому что если я просто предоставлю презентационный модуль, который отвечает за привязку моего signInInteractor к моему докладчику, он должен работать, но это не так.

Заранее спасибо за любую помощь

1 Ответ

1 голос
/ 04 мая 2019

Как говорится в сообщении об ошибке, вы пытаетесь передать SignInInteractor из вашего PresentationModule в LoginPresenter, но нигде не реализуете его реализацию.Возможным решением было бы добавить следующий блок кода к вашему PresentationModule:

@Provides @Singleton fun provideSignInInteractor(): SignInInteractor {
  return TODO("Add an implementation of SignInInteractor here.")
}

Конечно, TODO необходимо заменить на SignInInteractor по вашему выбору (myInteractor()функция будет работать, например).Тогда этот SignInInteractor будет использоваться вашим LoginPresenter.Надеюсь, это поможет!

...