我遇到了匕首依赖性循环的问题,尽管找了几个小时,我找不到解决方案。我认为这是我对建筑的看法。可能有什么不对?我使用的是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) {
//..
}
}
答案 0 :(得分:2)
你的问题是你试图解决与Dagger和Dagger的ciclic依赖关系并没有解决这个问题。
这可以在您的架构中得到纠正。只需将回调传递给模型,而不是将Presenter传递给模型。
这个:
public class InicioModel implements InicioMvpModel{
@Inject
public InicioModel() {
}
@Override
public void recuperarAgendamentos(Presenter inicioPresenter) {
//...
inicioPresenter.atualizarListaAgendamentos(agendamentos);
}
}
就是这样。只需将演示者作为模型中方法的参数传递即可。这使得通信更少耦合。
您还可以查看RxJava,它不需要在方法中传递演示者。链接:https://github.com/ReactiveX/RxJava
Antonio Leiva对MVP也有很好的实施方案: https://github.com/antoniolg/androidmvp