簡體   English   中英

Dagger + MVP-在模型中注入Presenter的問題

[英]Dagger + MVP - Problems injecting Presenter in Model

我在使用匕首依賴周期時遇到問題,盡管花了幾個小時,但找不到解決方案。 我認為這是我的建築理念。 有什么事嗎 我正在使用Dagger 2.11。

遵守守則

Inicio.java

public class Inicio extends BaseFragment implements InicioMvpView {

@Inject
InicioMvpPresenter inicioPresenter;

@Inject
MainMvpPresenter<MainMvpView> mainPresenter;
//...

InicioComponent.java

@Subcomponent(modules = {InicioModule.class})
public interface InicioComponent extends AndroidInjector<Inicio> {

    @Subcomponent.Builder
    abstract class Builder extends AndroidInjector.Builder<Inicio> {
    }
}

InicioModel.java

public class InicioModel implements InicioMvpModel{

    @Inject
    InicioMvpPresenter inicioPresenter;

    @Inject
    public InicioModel() {

    }

    @Override
    public void recuperarAgendamentos() {

        //...

        inicioPresenter.atualizarListaAgendamentos(agendamentos);

    }
}

InicioModule.java

@Module
public class InicioModule {

    @Provides
    InicioMvpView provideInicioView(Inicio inicioFragment){
        return inicioFragment;
    }

    @Provides
    InicioMvpPresenter provideInicioPresenter(
            InicioPresenter presenter) {
        return presenter;
    }

    @Provides
    InicioMvpModel provideInicioModel(InicioModel inicioModel) {
        return inicioModel;
    }
}

InicioPresenter.java

public class InicioPresenter implements InicioMvpPresenter{

    @Inject
    InicioMvpModel inicioModel;

    @Inject
    InicioMvpView inicioMvpView;

    @Inject
    public InicioPresenter() {
    }

    @Override
    public void recuperarAgendamentos(Bundle savedInstanceState) {

    //..

    }
}

您的問題是,您嘗試使用Dagger解決小問題,而Dagger無法解決此問題。

可以在您的體系結構中對此進行更正。 只需將回調傳遞給您的模型,而不是將Presenter傳遞給模型。

這個:

public class InicioModel implements InicioMvpModel{

@Inject
public InicioModel() {

}

@Override
public void recuperarAgendamentos(Presenter inicioPresenter) {

    //...

      inicioPresenter.atualizarListaAgendamentos(agendamentos);

    }
}

而已。 只需將presenter作為參數傳遞給模型中的方法即可。 這使得通信不那么耦合。

您還可以查看RxJava,它消除了在方法中傳遞presenter的需要。 鏈接: https//github.com/ReactiveX/RxJava

Antonio Leiva的MVP也有一個很好的實現方法: https : //github.com/antoniolg/androidmvp

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM