如何使用Dagger 2向主持人注入idemId? dagger.android

时间:2017-06-26 09:24:32

标签: java android dagger-2 dagger

我想直接将点击的项目ID传递给详细的演示者。我的细节活动有公共财产,所以我试着把它提供给我的演示者。

这是我的代码;

@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;
}

我收到以下错误,

  

如果没有@Inject构造函数或@ Provide-annotated方法,则无法提供MovieDetailActivity。此类型支持成员注入,但不能隐式提供。

1 个答案:

答案 0 :(得分:1)

您必须先提供MovieDetailActivity,然后将MovieDetailActivity传递给MovieDetailActivityModule构造函数,并在模块中提供以下活动:

@Provides
@SomeScope
public  MovieDetailActivity activity(){
     return this.activity;
}

但请注意,将活动传递给匕首的模块并不是一个好的模式。

另外你应该使用范围机制,只要它的范围存在就关注保持类的单个实例,你当前的代码似乎也会导致内存泄漏。

如果您使用新的android-dagger扩展程序,则可以覆盖模块构建器中的seedInstance以访问您的活动

@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));
    }
  }