繁体   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