Java 匕首&x2B;MVP-模型中的演示者问题
我在匕首依赖循环中遇到了问题,尽管找了几个小时,我还是找不到解决方案。我想这是我对建筑的看法。有什么不对劲吗?我用的是匕首2.11 遵循代码 Inicio.javaJava 匕首&x2B;MVP-模型中的演示者问题,java,android,dagger-2,Java,Android,Dagger 2,我在匕首依赖循环中遇到了问题,尽管找了几个小时,我还是找不到解决方案。我想这是我对建筑的看法。有什么不对劲吗?我用的是匕首2.11 遵循代码 Inicio.java public class Inicio extends BaseFragment implements InicioMvpView { @Inject InicioMvpPresenter inicioPresenter; @Inject MainMvpPresenter<MainMvpView> mainPrese
public class Inicio extends BaseFragment implements InicioMvpView {
@Inject
InicioMvpPresenter inicioPresenter;
@Inject
MainMvpPresenter<MainMvpView> mainPresenter;
//...
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 and Dagger解决ciclic依赖关系并不能解决此问题 这可以在您的体系结构中得到纠正。只需将回调传递给模型,而不是将演示者传递给模型 这是:
public class InicioModel implements InicioMvpModel{
@Inject
public InicioModel() {
}
@Override
public void recuperarAgendamentos(Presenter inicioPresenter) {
//...
inicioPresenter.atualizarListaAgendamentos(agendamentos);
}
}
就这样。只需在模型中的方法中将presenter作为参数传递。这使得通信不那么耦合
您还可以查看RxJava,它消除了在方法中传递presenter的需要。链接:
Antonio Leiva还为MVP提供了一个很好的实施方案:
您的问题是,您试图用Dagger and Dagger解决ciclic依赖关系并不能解决此问题 这可以在您的体系结构中得到纠正。只需将回调传递给模型,而不是将演示者传递给模型 这是:
public class InicioModel implements InicioMvpModel{
@Inject
public InicioModel() {
}
@Override
public void recuperarAgendamentos(Presenter inicioPresenter) {
//...
inicioPresenter.atualizarListaAgendamentos(agendamentos);
}
}
就这样。只需在模型中的方法中将presenter作为参数传递。这使得通信不那么耦合
您还可以查看RxJava,它消除了在方法中传递presenter的需要。链接:
Antonio Leiva还为MVP提供了一个很好的实施方案:
您好,为什么要在@inject中注释此方法?你在任何地方调用AndroidJector.inject()吗?嗨,我在调用使片段膨胀的活动。我认为这不起作用。尝试调用片段。另外,尽量不要插入视图,只需将其简化即可。将视图添加到后面。不要在你的属性中使用@inject注入你的演示者,而是注入构造函数库的Leandro。一切都正常,直到我尝试将演示者注入模型,这就是问题所在。我在代码中没有看到这一点。所以,模型有一个Presenter实例,Presenter有一个Model实例,对吗?你们想让Dagger解决这个ciclic问题吗?嗨,你们为什么要注释这个@inject方法?你在任何地方调用AndroidJector.inject()吗?嗨,我在调用使片段膨胀的活动。我认为这不起作用。尝试调用片段。另外,尽量不要插入视图,只需将其简化即可。将视图添加到后面。不要在你的属性中使用@inject注入你的演示者,而是注入构造函数库的Leandro。一切都正常,直到我尝试将演示者注入模型,这就是问题所在。我在代码中没有看到这一点。所以,模型有一个Presenter实例,Presenter有一个Model实例,对吗?你想让Dagger解决这个ciclic问题吗?谢谢Leandro,就是这样。我的注意力不够,也许是因为我是一个匕首初学者。谢谢莱安德罗,就是这样。我的注意力不够,也许是因为我是一个匕首初学者。
public class InicioModel implements InicioMvpModel{
@Inject
public InicioModel() {
}
@Override
public void recuperarAgendamentos(Presenter inicioPresenter) {
//...
inicioPresenter.atualizarListaAgendamentos(agendamentos);
}
}