我想将单击的项目 ID 直接传递给详细信息演示者。我的详细 Activity 有一个公共(public)属性(property),因此我尝试将其提供给我的演示者。
这是我的代码;
@Module
public class MovieDetailActivityModule {
@Provides
Long provideMovieId(MovieDetailActivity movieDetailActivity) {
return movieDetailActivity.movieId;
}
}
@Inject
MovieDetailPresenter(
@NonNull MovieDetailContract.View view,
@NonNull MovieRepository movieRepository,
@NonNull Long movieId) {
mView = view;
mMovieRepository = movieRepository;
mMovieId = movieId;
}
我收到以下错误,
MovieDetailActivity cannot be provided without an @Inject constructor or from an @Provides-annotated method.This type supports members injection but cannot be implicitly provided.
最佳答案
您必须首先提供 MovieDetailActivity
,因此将 MovieDetailActivity
传递给 MovieDetailActivityModule
构造函数,并在模块中提供 Activity ,如下所示:
@Provides
@SomeScope
public MovieDetailActivity activity(){
return this.activity;
}
但请注意,将 Activity 传递给 dagger 的模块并不是一个好的模式。
此外,您还应该使用作用域机制,只要其作用域存在,它就会关心保留类的单个实例,您当前的代码似乎也会导致内存泄漏。
如果您使用新的 android-dagger 扩展,您可以在模块构建器中覆盖 seedInstance
来访问您的 Activity
@Subcomponent.Builder abstract class Builder extends AndroidInjector.Builder<YourActivity> {
public abstract Builder yourModule(YourModule module);
@Override public void seedInstance(YourActivity activity) {
yourModule(new YourModule(activity.movieId));
}
}
关于java - 如何使用 Dagger 2 将 idemId 注入(inject)到 Presenter 中? Dagger .android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44756567/