![](/img/trans.png)
[英]Dagger 2 with MVP, avoid creating extra presenter object on view recreation
[英]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.