如何在Dagger2中提供视图?
下面是活动,它仍然使用旧的DI模型,我试图迁移到Dagger2(使用Dagger-android)。我想注入Presenter,正如你所看到的,一个依赖是'NewProjectDisplayer',它是活动中的自定义视图。如何在Dagger2中提供视图?
这是 'NewProjectDisplayer' 我想要提供给演示
我有一个模块(的AppModule),其提供像ProjectService全局相关性,login服务等
下面是我遇到麻烦的NewProjectModule。与该活动相关的其中一个依赖是'NewProjectDisplayer'。我不知道我能提供给它..
@Module public class NewProjectActivityModule {
@Provides
NewProjectDisplayer provideNewProjectDisplayer(View view) {
// ??? return view.findViewById(R.id.create_project_view);
}
@Provides
NewProjectNavigator provideNewProjectNavigator(BaseActivity baseActivity) {
return new AndroidNewProjectNavigator(baseActivity);
}
@Provides
NewProjectPresenter provideNewProjectPresenter(NewProjectDisplayer displayer, //
ProjectService projectService,
LoginService loginService,
UserService userService,
NewProjectNavigator navigator, //
PermissionHandler permissionHandler,//
CropImageHandler cropImageHandler,//
RxSchedulers schedulers) {
return new NewProjectPresenter(displayer, projectService, loginService,
userService, navigator, permissionHandler, cropImageHandler, schedulers);
}
}
我怎么能提供这种“NewProjectDisplayer”,使演示者可以创建和注入?我正在使用匕首 - 机器人。
回答:
您无法在与dagger-android
兼容的活动模块上提供或执行findViewById
,原因之一是模块是在视图实际位于层次结构之前创建的。另外,这样做不是一个好习惯,但如果你仍然相信你应该这样做,你可以尝试创建一个子组件,它将有一个提供视图依赖的模块,并且它必须在setContentView
之后创建,如由@elmorabea建议。
回答:
只是解决你的问题,不知道你是否应该提供与匕首的意见,虽然。
改变你的模块是这样的。
@Module public class NewProjectActivityModule {
private View view;
public NewProjectActivityModule (View view) {
this.view = view;
}
@Provides
NewProjectDisplayer provideNewProjectDisplayer(View view) {
return view;
}
}
然而,无论你在创建Dagger组件,你都需要做类似的事情。
YourDaggerComponent.builder().newProjectActivityModule(new NewProjectActivityModule (yourViewInstance)).build();
否则它会在运行时崩溃。
以上是 如何在Dagger2中提供视图? 的全部内容, 来源链接: utcz.com/qa/258501.html