我想使用MVP模式构建Android应用程序。
我有一个片段(视图)和一个演示者类。
我想要的是基本上将演示者注入片段,并将片段设置为演示者的视图(通过视图将实现的接口)
如何使用依赖注入(使用Dagger2)轻松正确地连接2?
修改
此外,我希望演示者成为单身人士,因此它能够持久保存数据和状态改变方向
答案 0 :(得分:2)
首先,您需要定义一个演示者模块:
@Module
class SearchPresenterModule {
@NonNull
private final SearchContract.View mView;
SearchPresenterModule(@NonNull SearchContract.View view) {
this.mView = view;
}
@Provides
SearchContract.View provideSearchContractView() {
return mView;
}
}
以下是示例组件:
@FragmentScoped
@Component(modules = SearchPresenterModule.class)
interface SearchComponent {
void inject(SearchActivity activity);
}
注入你的演示者:
@Inject
SearchPresenter mSearchPresenter;
DaggerSearchComponent.builder()
.searchPresenterModule(new SearchPresenterModule(searchFragment))
.build()
.inject(this);
最后注入你的演示者的构造函数:
@Inject
SearchPresenter(@NonNull SearchContract.View view, @NonNull SearchRepository searchRepository) {
this.mView = view;
mView.setPresenter(this);
}
额外:这里有碎片注释:
@Documented
@Scope
@Retention(RetentionPolicy.RUNTIME)
public @interface FragmentScoped {
}
您可以查看我的MVP + DAGGER2示例回购 https://github.com/savepopulation/wikilight
答案 1 :(得分:0)
所以演示者就像
@Singleton
public class Presenter{
private View mView; ...
视图应为
public class View extends ...{
@Inject
protected Presenter mPresenter ...
嗯,你只需要模块中的方法,如
inject(View view)
和Dagger应该像单身实例和注射一样照顾其余部分