我有一个注入Presenter的MainActivity,Presenter对象注入交互器和交互器对象注入APIHelper。 MainModule中有演示者,交互者和APIHelper的所有提供者。Dagger2不能一直解决依赖关系
@Module
public class MainActivityModule {
private final MainActivity activity;
//Context context;
public MainActivityModule (MainActivity activity) {
this.activity = activity;
}
@Provides
@Singleton
public MainViewPresenter providesMainPresenter(){
return new MainPresenterImpl(activity);
}
@Provides
@Singleton
ListingInteractor providesInteractor(){
return new ListingInteractorImpl(activity);
}
@Provides
@Singleton
ApiHelper providesAPI(){
return new ApiHelper(activity);
}
}
我已经注入该组件在MainActivity这样的:
DaggerMainActivityComponent.builder()
.mainActivityModule(new MainActivityModule(MainActivity.this))
.build().inject(this);
在我的演示实现我有相互作用分子,如:
public class MainPresenterImpl implements MainViewPresenter {
Context context;
private MainView mainView;
// @Inject
ListingInteractor interactor; //here i get null interactor
MyScrollListener scrollListener;
public MainPresenterImpl(MainActivity activity) {
this.context = activity;
this.mainView = activity;
}
@Override
public void getCatFacts() {
interactor.getFacts();
}
我的交互器实现类的API帮助它的构造需要背景
public class ListingInteractorImpl implements ListingInteractor{
private Context context;
@Inject
private APIHelper; // getting null APIHelper
public ListingInteractorImpl(Context context) {
this.context = context;
}
我的组件接口是这样的:
@Component(modules={MainActivityModule.class})
@Singleton
public interface MainActivityComponent {
void inject(MainActivity mainActivity);
/*void inject(MainPresenterImpl presenter);*/
MainViewPresenter getMainPresenter();
ListingInteractor getInteractor();
ApiHelper getHelper();
}
但只有主持人对象在MainActivity创建演示者的其他所有对象,包括交互器,APIHelper被null.According到匕首它应该可以解决所有的依赖关系。
您是否在Dagger组件中注入了演示者?否则我不认为它会工作。一般来说,这个活动有一个@Inject Presenter p;主持人有迭代器或任何你想要注入的东西,注入他的构造函数中。因此,演示者构造函数将是MainPresenterImpl(activity,iterator)。并且Dagger会知道你在模块中提供了迭代器的内容(不知道是否清楚) – Eselfar
看起来你缺少一些关于如何使用Dagger以及它如何工作的基础知识。我建议您再次阅读Dagger 2用户指南或其他一些教程,并确保您了解如何提供或注入依赖 –
@Eselfar我已添加组件接口的代码。我在组件中有一个主持人,它正在MainActivity中初始化,但是我在主持人内部注入的对象没有像交互者和交互者中的交互者和apihelper一样初始化 – ozmank