我刚开始学习 Dagger 2 并且有一些我找不到答案的问题。1.匕首是否负责破坏链接。也就是说,我有这个代码
private MODEL view;
@Inject
protected Model mModel;
@Inject
protected CompositeDisposable mCompositeDisposable;
@Override
public void attachView(MODEL view) {
this.view = view;
BasePresenterComponent component = DaggerBasePresenterComponent.builder()
.basePresenterModule(new BasePresenterModule())
.build();
mModel = component.getModel();
mCompositeDisposable = component.getCompositeDisposable();
}
在使用匕首之前,我破坏了 detachView 方法中的一些链接
@Override
public void detachView() {
view = null;
mModel = null;
if (mCompositeDisposable != null && !mCompositeDisposable.isDisposed()) {
mCompositeDisposable.dispose();
}
}
如果正确指定 Scope,使用匕首时是否有必要这样做?
这是相同的代码示例
公共类 MainActivity 扩展 AppCompatActivity 实现 IOnFragmentInteractionListener {
RequestFragment mRequestFragment; OrderFragment mOrderFragment; FragmentTransaction mTransaction; //some code private void startFragment(Fragment fragment) { **mTransaction = getSupportFragmentManager().beginTransaction();** mTransaction.replace(R.id.fragment_container, fragment); mTransaction.commit(); }
}
那么,像 FragmentTransaction 这样的依赖项应该被移到 Dagger 模块中还是应该留在活动中?我写了这个方法,但我不确定它是否正确:
@Module
public class MainActivityModule {
//some code
@Provides
public FragmentTransaction transaction(AppCompatActivity activity) {
return activity.getSupportFragmentManager().beginTransaction();
}
}
好吧,如果有人在MVP中抛出几篇关于Dagger架构的文章,我特别想在GitHub上看到一些代码,我会很高兴疯了=)祝大家好运。
不,不在乎。注释
@Inject
绑定到您Module
在帮助下创建的对象的引用provide
,仅此而已。Scope 注释本身只创建一个单例。匕首本身不会破坏任何东西,也没有魔法。所有范围必须由您自己销毁。顺便说一句,最好不要注入
compositeDisposable
,因为可能会出现这样一种情况:在某个 Presenter 中您向网络发出请求,而在另一个 Presenter 中您发出dispose
请求并被取消,这些操作不应该相关,但是由于您有compositeDisposable
一个对象对所有演示者,那么这可能会发生。最好是创建一个BasePresenter并放在那里,然后从它继承,那么每个presenter都会有一个单独的对象compositeDisposable
最好不要通过 dagger(Activity、Fragment、SupportFragmentManager 等)注入所有生命周期不稳定的依赖项,因为这样您需要确保没有内存泄漏、干净的范围和一些显着的优势这种方法没有给出,只会使测试复杂化。
您可以在这些文章的系列中开始研究匕首。一个好的和简单的解释,主要是阅读所有文章,因为在最后的文章中,作者改变了他在第一篇文章中描述的一些事情的想法。
PS 如果您在项目中需要一个好的路由器以及在演示者中导航的能力,请查看Cicerone