例如,我有以下界面:
public interface Repository {
Observable<Pojo> getPojos();
}
及其实施:
public class RepositoryImpl implements Repository {
public RepositoryImpl() {
}
@Override
public Observable<Pojo> getPojos() {
return null;
}
}
模块:
@Module
class AppModule {
public AppModule() {
}
@Provides
@Singleton
Repository provideRepositoryImpl() {
return new RepositoryImpl();
}
}
和组件:
@Singleton
@Component(modules = { AppModule.class })
public interface AppComponent {
void inject(MainActivity mainActivity);
}
当我尝试构建项目时,我会收到错误标题。我的代码中有什么问题?
答案 0 :(得分:1)
仔细阅读你的错误(强调我的):
Dagger 2错误:如果没有@Inject构造函数或@ Provide-annotated方法,则无法提供“ RepositoryImpl ”
通常,这意味着您已尝试@Inject RepositoryImpl
,而不是@Inject Repository
。这一点尤为重要,因为您的Module直接调用RepositoryImpl构造函数,而不是让Dagger使用@Inject
- 带注释的构造函数创建RepositoryImpl。 (如果有,您可以RepositoryImpl
作为@Provides
方法的参数或切换到@Binds
方法,您可以在注入接口与实现之间做出选择。)
答案 1 :(得分:0)
我设置Dagger 2的方式是在我的项目中我添加了注入组件。像这样。
public class NyApplication extends Application {
InjectionComponent component;
@Override
public void onCreate() {
super.onCreate();
setDagger();
}
private void setDagger() {
component = DaggerAppComponent.builder()
.appComponent(new AppModule())
.build();
component.inject(this);
}
public InjectionComponent getComponent() {
return component;
}}
然后在我的活动中无论它是什么。我像这样注入onCreate。
public class MainActivity extends Activity {
@Inject
Object object;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
((MyApplication) getApplication()).getComponent().inject(this);
}}
我希望这会对你有所帮助。