首次将Dagger 2与MVP配合使用。
我被困在一个非常简单的实现中。
我的演示者模块在构造函数中使用了View Interface以及上下文和数据管理器,我对如何将活动上下文发送到View接口的构造函数感到困惑。 任何帮助将不胜感激..
这是我的App类代码:
public class App extends Application {
private static App app;
public SampleComponent getSc() {
return sc;
}
private SampleComponent sc;
public static App getApp() {
return app;
}
@Override
public void onCreate() {
super.onCreate();
app = this;
sc = DaggerSampleComponent.builder()
//.sampleModule(new SampleModule())
.presenterModule(new PresenterModule(new MainActivity(), getApplicationContext(), new ModelManager()))
.build();
}
}
演示者模块代码:
@Module
public class PresenterModule {
ShowCountContract.view v;
ModelManager mm;
Context c;
public PresenterModule(MainActivity m, Context c,
ModelManager mm) {
this.c = c;
this.mm = mm;
this.v = m;
}
@Singleton
@Provides
PresenterClass getPresentationClass() {
return new PresenterClass(mm, v);
}
}
答案 0 :(得分:0)
要处理Android上下文,最好的方法是使用应用程序模块创建应用程序组件。该模块应负责提供整个应用程序中常见的对象,例如Context
。基于该组件,您可以为每个功能/活动/等创建子组件。
@Module
public class ApplicationModule {
private final Application application;
public ApplicationModule(Application application) {
this.application = application;
}
@Provides
Context provideContext() {
return application;
}
}
如果您选择只使用一个组件(我不建议这样做),则用于DaggerComponent
创建的代码将如下所示:
DaggerSampleComponent.builder()
.applicationModule(new ApplicationModule(this))
.otherModule(new OtherModule())
.build();
或者您可以使用Component.Builder
由于Activity
实例是由Android Framework创建的,因此我们无法将View接口作为构造函数参数传递。常见的方法是在Presenter中创建attachView(ViewInterface)
这样的方法,以便能够设置内部属性。
您应该更改的另一件事是从App
中删除Presenter的构造函数,并由OtherModule
负责:
@Module
public class OtherModule {
@Singleton
@Provides
PresenterClass getPresentationClass(Context ctx) {
return new PresenterClass(ctx, new ModelManager());
}
}
我建议您检查此article,深入了解Dagger,甚至显示直接考虑到Android环境的另一个Dagger版本。