Как внедрить idemId для докладчика с помощью Dagger 2? dagger.android
Я хочу передать выбранный идентификатор элемента непосредственно ведущему. У меня есть публичная собственность на мою детальную деятельность, поэтому я попытался предоставить это своему докладчику.
Вот мой код;
@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 не может быть предоставлено без конструктора @Inject или с помощью аннотированного методом @Provides. Этот тип поддерживает внедрение членов, но не может быть предоставлен неявным образом.
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));
}
}