构造函数在匕首 2 和 mvp 中注入 make MissingBinding
Constructor injecting make MissingBinding in dagger 2 and mvp
我用 dagger2 和 mvp 创建了一个简单的项目。
这是我的组件:
@MainScope
@Component(modules = {MainModule.class})
public interface IMainComponent {
void inject(MainActivity mainActivity);
}
这是MainModule.class:
@Module
public class MainModule {
@MainScope
@Provides
IMain.IMainModel model() {
return new MainModel();
}
}
现在在 Presenter 中,我想从它的构造函数中注入 Presenter,所以我这样做了:
public class MainPresenter implements IMain.IMainPresenter {
IMain.IMainModel model;
IMain.IMainView view;
@Inject
public MainPresenter(IMain.IMainModel model) {
this.model = model;
}
但是我得到了这个错误:
symbol: class DaggerIMainComponent
location: package com.safarayaneh.engineer.main.di
E:\Projects\Android\NewEng\Engineer\engineer\src\main\java\com\safarayaneh\engineer\main\di\IMainComponent.java:9: error: [Dagger/MissingBinding] com.safarayaneh.engineer.main.mvp.IMain.IMainPresenter cannot be provided without an @Provides-annotated method.
当在 MainModule.class 中创建 provider
以创建演示者并删除演示者构造函数上方的 @Inject
时,一切都很好:
@模块
public class MainModule {
@MainScope
@Provides
IMain.IMainModel model() {
return new MainModel();
}
@MainScope
@Provides
IMain.IMainPresenter presenter(IMain.IMainModel model) {
return new MainPresenter(model);
}
}
你的问题是你的 Activity 期望 IMain.IMainPresenter
,但如果你只是注释构造函数,那么放置在对象图上的就是具体的 MainPresenter
。
这里有三个选项:
- 使用显式提供程序方法(就像您所做的那样)
- 在模块内使用
@Binds
注释指定 MainPresenter
应提供为 IMain.IMainPresenter
- 不使用演示者界面
我用 dagger2 和 mvp 创建了一个简单的项目。
这是我的组件:
@MainScope
@Component(modules = {MainModule.class})
public interface IMainComponent {
void inject(MainActivity mainActivity);
}
这是MainModule.class:
@Module
public class MainModule {
@MainScope
@Provides
IMain.IMainModel model() {
return new MainModel();
}
}
现在在 Presenter 中,我想从它的构造函数中注入 Presenter,所以我这样做了:
public class MainPresenter implements IMain.IMainPresenter {
IMain.IMainModel model;
IMain.IMainView view;
@Inject
public MainPresenter(IMain.IMainModel model) {
this.model = model;
}
但是我得到了这个错误:
symbol: class DaggerIMainComponent
location: package com.safarayaneh.engineer.main.di
E:\Projects\Android\NewEng\Engineer\engineer\src\main\java\com\safarayaneh\engineer\main\di\IMainComponent.java:9: error: [Dagger/MissingBinding] com.safarayaneh.engineer.main.mvp.IMain.IMainPresenter cannot be provided without an @Provides-annotated method.
当在 MainModule.class 中创建 provider
以创建演示者并删除演示者构造函数上方的 @Inject
时,一切都很好:
@模块
public class MainModule {
@MainScope
@Provides
IMain.IMainModel model() {
return new MainModel();
}
@MainScope
@Provides
IMain.IMainPresenter presenter(IMain.IMainModel model) {
return new MainPresenter(model);
}
}
你的问题是你的 Activity 期望 IMain.IMainPresenter
,但如果你只是注释构造函数,那么放置在对象图上的就是具体的 MainPresenter
。
这里有三个选项:
- 使用显式提供程序方法(就像您所做的那样)
- 在模块内使用
@Binds
注释指定MainPresenter
应提供为IMain.IMainPresenter
- 不使用演示者界面