![](/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.