DataDinding 和 Dagger2 出错
Error with DataDinding and Dagger2
我正在开发一个使用 DataBinding 的项目,但是在添加 Dagger2 并实现模块、组件和嫁接之后,我遇到了这个错误:
Error:(8, 74) error: package com.anda.soft.app.databinding does not
exist
Error:(16, 13) error: cannot find symbol class ActivityMainBinding
Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
java.lang.IllegalArgumentException: not a valid component method: injectPresentationFragmentPresenter()
这是我的模块:
@Module
public class Modul {
private Context context;
public Modul(Context context){
this.context = context;
}
@Provides
public MainActivity provideMainActivity(){
return new MainActivity();
}
@Provides
public PresentationFragmentPresenter providePresentationFragment(){
return new PresentationFragmentPresenterImp(provideMainActivity());
}
}
我的评论:
@Component (modules = Modul.class )
public interface Compoment {
void injectPresentationFragmentPresenter();
}
和图表
public class App extends Application {
private Compoment mCompoment;
@Override
public void onCreate() {
super.onCreate();
setUpGraph();
}
private void setUpGraph() {
mCompoment = DaggerCompoment.builder()
.modul(new Modul(this))
.build();
}
public Compoment getCompoment(){
return mCompoment;
}
}
最后是我的 MainActivity
private ActivityMainBinding mActivityMainBinding ;
@Inject PresentationFragmentPresenter mView;
private Toolbar mToolbar;
@Override
protected void bindView(int layoutResource) {
mView = new PresentationFragmentPresenterImp(this);
mActivityMainBinding = DataBindingUtil.setContentView(this,layoutResource);
}
@Override
public int getLayoutResource() {
return R.layout.activity_main;
}
我做错了什么?你知道 Dagger 和 DataBinding 之间是否存在不兼容问题吗?
一个组件有两种提供依赖的方式:
提供方法 return 注入或提供的类型。
这是提供方法的示例。请注意,这是一个简单的 return 依赖项的方法,在本例中是 OKHttpClient
.
OkHttpClient httpClient();
成员注入方法 将依赖项注入特定类型。
这是成员注入方法的示例。请注意,它采用单个参数,即将与其依赖项一起注入的类型(在本例中为 MainActivity
:
void inject(MainActivity activity);
您可以在 Dagger 2 @Component javadocs 上阅读有关组件的更多信息。
你的问题是 void injectPresentationFragmentPresenter();
两者都不是。它没有 return 任何东西,因此它不是一种供应方法。它也没有参数,所以它不能是成员注入方法。根据方法的命名和 post 的其余部分,我猜你想要的是像这样定义方法:
void injectPresentationFragmentPresenter(PresentationFragmentPresenter presenter);
我正在开发一个使用 DataBinding 的项目,但是在添加 Dagger2 并实现模块、组件和嫁接之后,我遇到了这个错误:
Error:(8, 74) error: package com.anda.soft.app.databinding does not
exist
Error:(16, 13) error: cannot find symbol class ActivityMainBinding
Error:Execution failed for task ':app:compileDebugJavaWithJavac'. java.lang.IllegalArgumentException: not a valid component method: injectPresentationFragmentPresenter()
这是我的模块:
@Module
public class Modul {
private Context context;
public Modul(Context context){
this.context = context;
}
@Provides
public MainActivity provideMainActivity(){
return new MainActivity();
}
@Provides
public PresentationFragmentPresenter providePresentationFragment(){
return new PresentationFragmentPresenterImp(provideMainActivity());
}
}
我的评论:
@Component (modules = Modul.class )
public interface Compoment {
void injectPresentationFragmentPresenter();
}
和图表
public class App extends Application {
private Compoment mCompoment;
@Override
public void onCreate() {
super.onCreate();
setUpGraph();
}
private void setUpGraph() {
mCompoment = DaggerCompoment.builder()
.modul(new Modul(this))
.build();
}
public Compoment getCompoment(){
return mCompoment;
}
}
最后是我的 MainActivity
private ActivityMainBinding mActivityMainBinding ;
@Inject PresentationFragmentPresenter mView;
private Toolbar mToolbar;
@Override
protected void bindView(int layoutResource) {
mView = new PresentationFragmentPresenterImp(this);
mActivityMainBinding = DataBindingUtil.setContentView(this,layoutResource);
}
@Override
public int getLayoutResource() {
return R.layout.activity_main;
}
我做错了什么?你知道 Dagger 和 DataBinding 之间是否存在不兼容问题吗?
一个组件有两种提供依赖的方式:
提供方法 return 注入或提供的类型。
这是提供方法的示例。请注意,这是一个简单的 return 依赖项的方法,在本例中是 OKHttpClient
.
OkHttpClient httpClient();
成员注入方法 将依赖项注入特定类型。
这是成员注入方法的示例。请注意,它采用单个参数,即将与其依赖项一起注入的类型(在本例中为 MainActivity
:
void inject(MainActivity activity);
您可以在 Dagger 2 @Component javadocs 上阅读有关组件的更多信息。
你的问题是 void injectPresentationFragmentPresenter();
两者都不是。它没有 return 任何东西,因此它不是一种供应方法。它也没有参数,所以它不能是成员注入方法。根据方法的命名和 post 的其余部分,我猜你想要的是像这样定义方法:
void injectPresentationFragmentPresenter(PresentationFragmentPresenter presenter);